2014-11-22 58 views
0

我已经设法使用PHP创建XML文档。我现在想用PHP来循环访问xml文档并适当地显示它。这是我已经有的代码,但似乎没有工作。使用PHP处理XML

PHP循环

<?php 
      $rss2 = simplexml_load_file('food.xml'); 
       print "<h3>XML document processed with PHP</h3>"; 
      foreach ($rss2->xml->item as $item){ 
       print "Title: ". $item->name."<br>"; 
       print "Link: <a href=".$item->link.">".$item->link."</a><br>"; 
       print "Description: ". $item->description."<br>"; 
       print "<hr />"; 
      } 
?> 

XML文档

<?xml version="1.0"?> 
<xml> 
    <item> 
    <name>Food home page</name> 
    <link>http://www.food.com/</link> 
    <description>home cooking inspiration</description> 
    </item> 
    <item> 
    <name>Popular recipes</name> 
    <link>http://www.food.com/recipes-popular</link> 
    <description>Popular home food recipes</description> 
    </item> 
    <item> 
    <name>Pulled pork</name> 
    <link>http://www.food.com/recipe/pulled-pork-crock-pot-131018</link> 
    <description>Crock pot pulled pork recipe</description> 
    </item> 
</xml> 

任何人的帮助将不胜感激 感谢

+0

RSS的文档元素应该是“rss”而不是“xml”。 * BTW * – ThW 2014-11-22 12:02:46

回答

0

通过使用调试器或只是在你的$rss2变量运行var_dump可以看出,只有$rss2上的财产被称为item。我从中得到的结果是,simplexml以某种方式按元素名称对项目进行分组,并以类似方式将它们以数组形式公开。但是,如果您想了解更多信息,那可能是documented

更清洁地遍历您的数据,我会建议写你的for循环foreach ($rss2 as $element_name => $item)$element_name将持有该元素的名称,即item,这可能是在一个情况有意义您的XML架构允许在根级别的其他元素),尽管foreach ($rss2->item as $item)同样适用。

0

重写

foreach ($rss2->xml->item as $item) 

foreach ($rss2->item as $item) 

$ RSS2已经在XML标记水平,它关系到顶层标签。实际上你说的是“xml - xml - item”,它不存在于你的数据文件中。