如何使用foreach循环输出所有XML元素属性?

问题描述:

这里是XML的新手。如何使用foreach循环输出所有XML元素属性?

考虑这个简单的XML模式:

<products> 
    <category name="furniture"> 
       <item name="chair" name2="table"> 
          <size> 
           <small>10</small> 
           <large>20</large> 
          </size> 
       </item> 
       <item name="cabinet"> 
          <size> 
           <small>15</small> 
           <large>30</large> 
          </size> 
       </item> 
       <item name="shelf" name2="box" name3="frame"> 
          <size> 
           <small>5</small> 
           <large>10</large> 
          </size> 
       </item> 
    </category> 
</products> 

通知每个<item>元件具有不同量的属性。

我一直在试图使用XPATH和foreach循环没有成功回显属性。 当然,我错过了一小段语法。

$dom=simplexml_load_file("file.xml"); 

foreach ($dom->xpath("/products/category[@name='furniture']/item") as $parse)  
    echo'<tr><td>'.$parse->attributes().'</td></tr>';       

$ parse-> attributes();只给了我元素的第一个属性。 输出看起来是这样的:

<tr><td>chair</td></tr> 
<tr><td>cabinet</td></tr> 
<tr><td>shelf</td></tr> 

我缺少什么?

+0

感谢阿迈勒,嵌套的foreach的工作,但这个XML仅仅是一个更大的XML文件的一小部分。我不想在文件的其余部分造成循环。我正在寻找var_dump的内容,如果这很有意义... – LifeQuery

+0

好的,预期的输出是什么? –

+0

所有的属性,一个接一个(或每行 - 无所谓),例如:'椅子桌柜搁架框架'。这基本上都是每个“”元素中的所有属性。 – LifeQuery

使用嵌套循环foreach

foreach ($dom->xpath("/products/category[@name='furniture']/item") as $parse) { 
    foreach ($parse->attributes() as $attr) { 
     echo '<tr><td>'. $attr . '</td></tr>'."\n"; 
    } 
}