PHP和XML:迭代XML的叶子元素

时间:2015-09-09 11:41:49

标签: php xml

我希望使用XMLphp文件中提取叶节点的父节点:

<root>
     <level name="level1">
       <content name="c1/>
     </level>
     <level name="level2>
       <level name="sub-level-2a">
          <content name="c2" />
       </level>

       <level name="sub-level-2b">
          <level name="sub-sub-level-2b">
             <content name="c3" />
          </level>
       </level>
     </level>
</root>

所以在上面的XML中,叶子可以是多个级别,所考虑的元素是:

<content name="c1" />
<content name="c2" />
<content name="c3" />`

如何提取上述每个叶子的name属性&#39;父母和每片叶子的输出:<leaf-name-attribute> - <parent-name-attribute>

我试过了:

$content_node_parents = $xml->xpath('//content/parent::*');

foreach ($content_node_parents as $content_node_parent) 
{
  echo $content_node_parent['name']." - ".$content_node_parent->content['name']."\n";             
}`

以上工作完全正常,但只提取了非<content>元素,而且还提取了

1 个答案:

答案 0 :(得分:0)

使用xpath选择所需的值

//*[*[not(descendant::*)]]/@name | //*[not(descendant::*)]/@name

返回

Attribute='name="level1"'
Attribute='name="c1"'
Attribute='name="sub-level-2a"'
Attribute='name="c2"'
Attribute='name="sub-sub-level-2b"'
Attribute='name="c3"'