使用SimpleXMLElement和xpath从某些xml子元素中获取所有子元素

时间:2015-11-03 10:39:44

标签: php xpath simplexml

我有xml,如:

<root xmlns="urn:test:apis:baseComponents">
  <books>
    <book>
      <name>50 shades of grey</name>
    </book>
  </books>
  <disks>
    <disk>
      <name>Britney Spears</name>
    </disk>
  </disks>
</root>

这样的php代码:

$xml = new SimpleXMLElement($xml);
$books = $xml->books;
$disks = $xml->disks;

$disks->registerXPathNamespace('x', 'urn:test:apis:baseComponents');
$books->registerXPathNamespace('x', 'urn:test:apis:baseComponents');

$b_names = $books->xpath('//x:name');

b_names包含带有2个值而不是1的数组。首先保存books-&gt; book-&gt; name,second保存disk-&gt; disk-&gt; name。

你能解释一下我做错了什么,怎么才能找到只有一个元素的孩子?

我使用xpath而不是使用SimpleXMLElement手动取值的原因是我不知道要提前搜索的值是什么值。

1 个答案:

答案 0 :(得分:1)

使用\搜索$books->xpath('.//x:name')变量的后代,而不是根节点/文档节点的后代(路径$books的后代)。