PHP XML Traversing出错了

时间:2012-03-19 11:09:38

标签: php xml

我正在遍历xml文件,如下所示:

<?xml version="1.0" encoding="ISO-8859-1"?>
<wrapper>
  <site base="http://www.example1.co.uk/" name="example 1">
    <page>page1/</page>
  </site>
  <site base="http://www.example2.co.uk/" name="example 2">
    <page>page2/</page>
  </site>
</wrapper>

我的php就是这样:

xml = simplexml_load_file("siteList.xml");
foreach ($xml->site as $site => $child) {
  foreach ($xml->$site->page as $a => $page) { 
    $endUrl = ($child["base"] . "" . $page);
    print_r($endUrl . "<br />");
  }
}

技术有效,但会返回以下内容:

http://www.example1.co.uk/page1/
http://www.example2.co.uk/page1/

而不是:

http://www.example1.co.uk/page1/
http://www.example2.co.uk/page2/

它以某种方式使用上一循环中的page,我无法解决这个问题:'(

提前致谢!

2 个答案:

答案 0 :(得分:2)

你应该在内部循环上迭代$child,但事实并非如此。要解决此问题,请更改此

foreach ($xml->$site->page as $a => $page) {

到这个

foreach ($child as $page) { // you don't even need the $a

您也可以将外部循环简化为foreach ($xml->site as $child),因为您不关心密钥;如果您这样做,将$child重命名为$site将是提高可读性的合理下一步。

答案 1 :(得分:1)

使用前一个循环中的page。也许这种改变会有所帮助:

xml = simplexml_load_file("siteList.xml");
foreach ($xml->site as $site => $child) {
  foreach ($site->page as $a => $page) { 
    $endUrl = ($child["base"] . "" . $page);
    print_r($endUrl . "<br />");
  }
}