2016-07-22 108 views
0

我有這樣的XML文件的內容:特定標籤解析XML文件,以獲得同級標籤

<page> 
     <title>test</title> 
     <text>bla bla</text> 
    </page> 
    <page> 
     <title>another test</title> 
     <text>bla bla</text> 
    </page> 
    <page> 
     <title>hello</title> 
     <text>hello world</text> 
    </page> 

我想解析文件(PHP SAX解析器),以找到與標題頁「你好」 ,然後保存相應的文本標籤內容..我做了什麼,到目前爲止是這樣的:

$pages = array(); 
    $elements = null; 

    function startElements($parser, $name, $attrs) { 
     global $wiki, $elements; 

     if(!empty($name)) { 
     $elements = $name; 
     } 
    } 

    function endElements($parser, $name) { 
     global $elements; 

     if(!empty($name)) { 
     $elements = null; 
     } 
    } 

    function characterData($parser, $data) { 
     global $pages, $elements; 

     if(!empty($data)) { 
     if ($elements == 'TITLE') { 
      if((preg_match('/Hello/', $data)==1)) 
      { 

       // ... I found the page with the good title, but how to get the following text tag content!! 

      } 
     } 
     } 
    } 

    $parser = xml_parser_create(); 

    xml_set_element_handler($parser, "startElements", "endElements"); 
    xml_set_character_data_handler($parser, "characterData"); 

    if (!($handle = fopen('tmp.xml', "r"))) { 
     die("could not open XML input"); 
    } 

    while($data = fread($handle, 4096)) { 
     xml_parse($parser, $data); 
    } 

如何獲得與特定的標題標籤文本標籤的內容有任何想法?通過將所有數據保存在一個數組中,我可以得到我需要的結果,然後進行搜索!但我想要一個更好的解決方案。

謝謝。

+0

這是XML的巨大? – splash58

+0

僅供參考:[如何在PHP中解析和處理HTML/XML?](http://stackoverflow.com/questions/3577641/how-do-you-parse-and-process-html-xml-in-php ) – FirstOne

+0

@ splash58是的,一個巨大的XML。 –

回答

0

好吧我找到了一個解決方案,而不是像我想要的那樣基於SAX解析器,但仍然適用於大型文件。它通過結合SimpleXML(DOM解析器)和XMLReader(基於流的解析器)。 SimpleXML允許輕鬆訪問子節點。

使用XMLReader,數據一次傳遞一個元素,使用 expand()。使用此方法,可以將由XMLReader 傳遞的節點轉換爲DOMElement,然後轉換爲SimpleXML。對於結合兩種

詳細信息可以在這裏找到:http://www.ibm.com/developerworks/library/x-xmlphp2/

我希望這可以幫助別人。