PHP的复杂XPATH

时间:2018-01-17 12:13:29

标签: php arrays xml xpath xml-parsing

想想我的xml是这样的:

<products>
 <product>
  <ProductID>252</ProductID>
        <detail>
          <color>red</color>
          <price>$15</price>
        </detail>
        <detail>
          <color>blue</color>
          <price>$25</price>
        </detail>
 </product>
</products>

我需要获得ProductID = 252的RED MODEL

的价格值 我尝试过这个;但无法得到价格值:

$q = $xml->xpath('/products/product[ProductID="252"]/detail[color="red"]');
echo $q['price'];

1 个答案:

答案 0 :(得分:1)

你在这里遇到了一些小问题。您的XPath查询包含根<products>标记,如果您已将其导入SimpleXML,则不需要该标记。查询可以以product/...

开头

接下来,xpath()返回匹配元素的数组,即使它们只有一个。所以$q指的是完整的结果集,而不是第一个匹配。您正在寻找的匹配是数组的第一个元素,位于键0

最后,您指的是使用数组索引的价格 - ['price']。这用于获取标记的属性,而不是子节点。如果您想要<price>元素的文本内容,则应使用对象访问运算符->,并强制转换为字符串。

完整代码应如下所示:

$q = $xml->xpath('product[ProductID="252"]/detail[color="red"]')[0];

echo (string) $q->price;
// $15

有关完整示例,请参阅https://eval.in/936371