2012-02-20 85 views
0

對於個人用途,我目前正在編寫一個遞歸PHP函數,該函數應處理大量相對較大的XML文件。由於我只需要2-3個節點的值,因此我尋找了一種方法來儘可能節省內存和流量。所以我偶然發現了PHP Object XMLReader,它並不像預期的那樣工作,在PHP.net上沒有很好的記錄。 我當前的代碼如下:使用XMLReader正確處理XML文件

<?php 
    $reader = new XMLReader(); 
    $reader->open('http://path.to.xml/file', 'UTF-8'); 
    $att1 = $reader->getAttribute('att1'); 
    $att2 = $reader->getAttribute('att2'); 
    $reader->close(); 
    echo var_dump($att1) . ' ' . var_dump($att2); 
?> 

正如你可以看到這是純粹的調試,但它只是呼應了NULL兩次,其中,根據文檔,是這樣的:「如果給定無屬性名稱[被找到或定位在元素節點上]。

的XML結構(實際的文件是大於500線,而且還含有CDATA有時標籤):

<parentnode> 
    <att1><![CDATA[ VAL1 ]]></att1> 
    <randomtags>randomval</randomtags> 
    <att2>VAL2</att2> 
    <foo>bar</foo> 
</parentnode> 

我幾乎沒有使用XML的經驗和以前只使用了SimpleXML - 一次。我不想解析整個文件,只是這兩個值。

我已經嘗試過:

  • encapsing getAttribute方法參數<和>
  • 靜態調用的getAttribute方法
  • 改變的getAttribute參數包括以多種方式父節點

歡迎任何提示或提示。 :)

回答

2

您使用

$att1 = $reader->getAttribute('att1'); 

但在你的XML定義,ATT1和ATT2的元素,而不是屬性

+1

哎喲。這是一種尷尬,並證明我缺乏XML知識。 :/感謝您指出這一點,從現在開始不應該是一個困難的方式。 ^^ – 2012-02-20 16:57:09

+0

+1對你謙卑的評論。不要尷尬! – 2012-02-20 17:23:16