2016-07-22 23 views
0

兄弟タグの内容を取得します、その後、私はこれまででなかったものを...対応するテキストタグの内容を保存します。具体的なタイトルタグでテキストタグの内容を取得する方法について解析のXMLファイルには、私は、このXMLファイルを持っている

$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()を使用して一度に1つの要素に渡されます。このメソッドを使用すると、XMLReader によって渡されたノードをDOMElementに変換してからSimpleXMLに変換できます。両方を組み合わせるための

詳細はここで見つけることができます:http://www.ibm.com/developerworks/library/x-xmlphp2/

私は、これは他の誰かに役立ちます願っています。

関連する問題