2011-08-15 113 views
3

我想读从最终的XML文件开始想我的XML这样开始:读取结束XML文件中的PHP

<note> 
<to>Tove</to> 
<from>Jani</from> 
<heading>Reminder</heading> 
<body>Don't forget me this weekend!</body> 
</note> 
<note> 
<to>Samy</to> 
<from>Jani</from> 
<heading>Reminder</heading> 
<body>Don't Miss me this weekend!</body> 
</note> 

我需要阅读最后一个音符首先我使用的代码一样,

$x = $xmldoc->getElementsByTagName('note'); 
     $nofnews = $xmldoc->getElementsByTagName('note')->length; 
     for ($i = 0; $i < $nofnews; $i++) { 
      $item_title = $x->item($i)->getElementsByTagName('to') 
          ->item(0)->nodeValue; 
      $item_link = $x->item($i)->getElementsByTagName('from') 
          ->item(0)->nodeValue; 
          } 

预先感谢您

+1

你只需要先读最后一个音符的节点,或第一的最后一个音符节点,然后返回到第一? – hakre

回答

1

getElementsByTagName返回DOMNodeList。您可以访问每个元素通过它的数字索引(0至长-1)你已经做的,但在刚开始的结束,而不是开始你的for循环,再算上向下:

$x = $xmldoc->getElementsByTagName('note'); 
$nofnews = $x->length; 
for ($i = $nofnews-1; $i > -1; $i--) 
{ 
    $item = $x->item($i); 
    $item_title = $item->getElementsByTagName('to') 
         ->item(0)->nodeValue; 
    $item_link = $item->getElementsByTagName('from') 
         ->item(0)->nodeValue; 
} 

这应该已经为了你。

0

我不知道我理解正确,你的问题,但它似乎要开始按相反的顺序读取 XML文档的根元素的孩子吗?

(另外你给的例子内容就是从这里取:http://www.w3schools.com/PHP/php_xml_simplexml.asp)为什么不按照他们的例子吗?

但无论如何,这应该做的伎俩:

<?php 
$xml = simplexml_load_file("test.xml"); 

echo $xml->getName() . "<br />"; 

foreach(array_reverse($xml->children()) as $child) 
    { 
    // process your child element in here 
    } 
?> 

- >利用array_reverse()函数:http://www.w3schools.com/php/func_array_reverse.asp