2

如何在 for 循环内对当前 SimpleXMLElement 对象运行 Xpath 查询。例如

<?php
$xml = simplexml_load_string('<?xml version="1.0" encoding="ISO-8859-1"?>

<bookstore>

<book>
  <title lang="eng">Harry Potter</title>
  <price>29.99</price>
</book>

<book>
  <title lang="eng">Learning XML</title>
  <price>39.95</price>
</book>

</bookstore> ');


foreach ($xml as $value) {
    $result = $value->xpath('//title');
    var_dump($result);
    break;
}
?>

array
  0 => 
    object(SimpleXMLElement)[189]
      public '@attributes' => 
        array
          'lang' => string 'eng' (length=3)
      string 'Harry Potter' (length=12)
  1 => 
    object(SimpleXMLElement)[188]
      public '@attributes' => 
        array
          'lang' => string 'eng' (length=3)
      string 'Learning XML' (length=12)

这会输出两个书籍元素的结果,而我的意图是只显示第一个。我试图让查询在 for 循环中的 $value 对象上运行,因为我可能想在每本书上运行不同的查询(所以它必须在一个循环中!)不是在每一本书上,这是它目前的样子正在做。

4

2 回答 2

4

您可以使用.来表示当前节点。所以./Foo选择直接的孩子命名Foo,并.//Foo选择所有的后代命名Foo

如果没有点,//则假定引用文档的根,并选择Foo整个文档中调用的所有内容。

于 2012-12-11T23:37:34.020 回答
0

// 从当前节点中选择文档中与选择匹配的节点,无论它们在哪里。

当我运行查询以从根中选择所有节点时,我已经在所需的节点(例如 $value)中,因此从所有节点获取信息。

由于我已经在删除所需的节点元素,因此 // 获得了预期的结果,在当前节点上运行查询。

于 2012-12-07T12:14:36.860 回答