'XML'에 해당되는 글 3건

  1. 2010.08.31 php에서 xml 데이타 파싱하기 - xmlparser function by 잠수콩
  2. 2008.11.17 ASP - Msxml2.DOMDocument 활용법 by 잠수콩
  3. 2008.11.12 XMLDOM 사용법 by 잠수콩 (1)




PHP 에서 XML 데이타 파싱하는 클래스입니다.
몇가지 업그레이드 될 여지는 있는 함수이지만 일반적으로 사용하기엔 별무리없이 사용가능합니다.

<?
///////////////////////////////////////////
///--  XML 파싱 클래스 사용방법  --///
//////////////////////////////////////////

//XMLParser를 생성합니다.
$parser = new XmlParser('http://www.newjinbo.org/xe/rss');

//파싱된 데이타에서 필요한 노드를 뽑아옵니다.
$items = $parser->getData('RSS/CHANNEL/ITEM');

//뽑아온 노드를 루프를 돌리면서 최종노드의 값을 받아서 처리합니다.
foreach($items as $item){
    echo "<a href='".$item['LINK']."'>".$item['TITLE'],"</a></br>";
}
?>

 


<?php
//----- XML 파싱 클래스 ---//
class XmlParser {
    public $parser;
    public $depth=0;
    public $termStack;
    public $nodeData;
    public $fullParseData;
    public $prevdepth;
    public $uri;
    public $last_node;
    public $inside_data;

    function XmlParser($uri)
    {
        $this->setURI($uri);
        $this->run();
    }

    function run()
    {
        $this->termStack = array();
        $this->xmlInit();
        $this->parsing();
    }

    function setURI($uri)
    {
        $this->uri = $uri;
    }

    function xmlInit()
    {
        $this->parser = xml_parser_create();
        if(!$this->parser) echo "Parser Error<br>";
        if(!xml_set_object($this->parser, $this)) echo "xml set object error<br>";
        if(!xml_set_element_handler($this->parser, "tag_open", "tag_close")) echo "handler set error<br>";
        if(!xml_set_character_data_handler($this->parser, "cdata")) echo "cdata handler error<br>";
    }

    function cdata($parser, $cdata)
    {
        if($this->depth > $this->prevdepth)
        {
            if($this->inside_data)
                $this->nodeData[$this->nodeName()] .= $cdata;
            else
                $this->nodeData[$this->nodeName()] = $cdata;
            $this->last_node = $this->nodeName();
        }
        $this->inside_data=true;
    }

    function getData($node=null)
    {
        if($node == null)
        {
            return $this->fullParseData;
        }
        return $this->fullParseData[$node];
    }

    function parsing()
    {
        $fp = fopen($this->uri, "r");
        if(!$fp)
        {
            return 0;
        }
        while($data = fread($fp, 9182))
        {
            $this->parse($data);
        }
        fclose($fp);
        return 1;
    }

    function parse($data)
    {
        if(!xml_parse($this->parser, $data)) echo xml_error_string(xml_get_error_code($this->parser));
    }

    function getpNode($depth=0)
    {
        if($depth != 0)
        {
            $node=count($this->termStack) + $depth;
            $stack = array_slice($this->termStack, 0, $node);
        }
        else
        {
            $stack = $this->termStack;
        }
        return join("/",$stack);
    }

    function pushStack($name)
    {
        array_push($this->termStack, $name);
    }


    function getStackSize()
    {
        return count($this->termStack);
    }

    function tag_open($parser, $tag, $attributes)
    {
        $this->pushStack($tag);
        if($this->depth > $this->prevdepth)
        {
            if(count($this->nodeData))
            {
                $last_node = $this->getpNode(-2);
                $this->fullParseData[$last_node] = $this->nodeData;
            }
            $this->nodeData=array();
            $this->prevdepth = $this->depth;
        }
        $this->depth++;
        $this->inside_data=false;
    }

    function tag_close($parser, $tag)
    {
        $count = count($this->nodeData);
        if($count == 0)
            array_pop($this->termStack);
        $this->depth--;
        if($this->depth < $this->prevdepth)
        {
            if(count($this->nodeData) > 1)
                $this->fullParseData[$this->getpNode()][] = $this->nodeData;
            else
                $this->fullParseData[$this->getpNode()] = $this->nodeData;
            $this->nodeData=array();
        }
        else
        {
            $this->prevdepth = $this->depth;
        }
        if($count != 0)
            array_pop($this->termStack);
                $this->inside_data=false;
    }

    function nodeName()
    {
        return $this->termStack[$this->depth-1];
    }

}

?>


출처 : http://gogosim.tistory.com/78




 




저작자 표시 비영리 변경 금지
신고
Posted by 잠수콩


==========---- XML 원문 ----===========
<?xml ...?>
 <message>
  <header>
   <aaa>
     <kkk>asdf</kkk>
     <ttt>qwer</ttt>
   </aaa>
  </header>
 </message>
<?xml>
==========---- XML 원문 ----===========

==========---- asp 페이지 ----===========
'API 호출 객체 초기화
SET oXmlDoc = Server.CreateObject("Msxml2.DOMDocument")
'//oXmlDoc.setProperty "SelectionLanguage","XPath" 

oXmlDoc.loadXML(TX_DATA)
'//oXmlDoc.preserveWhiteSpace = true

Set ResponseNode_header = oXmlDoc.selectSingleNode("message/header").firstChild

 If Not IsNull(ResponseNode_header) Then

  If ResponseNode_header.nodeName = "aaa" Then

   set Nodes = oXmlDoc.getElementsByTagName("aaa")

   For each SubNodes in Nodes
    kkk = SubNodes.getElementsByTagName("kkk")(0).Text
    ttt = SubNodes.getElementsByTagName("ttt")(0).Text
   Next
  End If
 End If

이렇게하면
kkk, ttt 값을 뽑아낼 수 있다.

저작자 표시 비영리 변경 금지
신고
Posted by 잠수콩

XMLDOM 사용법

플밍_ASP 2008.11.12 09:38



Set oDOM = Server.CreateObject("Microsoft.XMLDOM")

with oDOM
    .async = False ' 동기식 호출
    .setProperty "ServerHTTPRequest", True ' HTTP로 XML 데이터 가져옴
    .Load(url)
end with


Set Nodes = oDOM.getElementsByTagName("result")
 For each SubNodes in Nodes
  regcnt = SubNodes.getElementsByTagName("regcnt")(0).Text
 Next
Set Nodes = Nothing

신고

'플밍_ASP' 카테고리의 다른 글

ASP - Msxml2.DOMDocument 활용법  (0) 2008.11.17
ASP - URLDecode 함수. 퍼옴  (0) 2008.11.17
FileSystemObject 이용, 로그남기기(ASP)  (0) 2008.11.12
랜덤함수(Random, ASP)  (0) 2008.11.12
핸드폰번호 자리수 함수(ASP)  (0) 2008.11.12
XMLDOM 사용법  (1) 2008.11.12
Posted by 잠수콩
TAG XML, xmldom