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


Get all children from certain xml child element using SimpleXMLElement and xpath

我有类似于的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的数组。第一个持有书籍->书籍->名称,第二个持有磁盘->磁盘->名称。

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

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

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