我有一个像下面这样的XML,我正在尝试进行xpath查询并使用simplexml解析它。XML 是 CURL 响应,存储在$response
变量中。我需要在<Item>
中查找 Code
属性并选择父<Product>
来解析它。
$response
:
<Items>
<Product>
<Item Code="123">
</Item>
<Price>170
</Price>
</Product>
<Product>
<Item Code="456">
</Item>
<Price>150
</Price>
</Product>
</Items>
这就是我正在做的:
$xml = simplexml_import_dom($response);
function loadNode($code){
global $xml;
$scode = $xml->xpath('//Item[contains(@Code,"' . $code . '")]/..');
echo $scode->Items->Product->Price;
}
loadNode("123");
这是我收到的通知:
注意:尝试获取非对象的属性
几个观察结果:
xpath()
方法返回一个数组SimpleXMLElement
对象,而不是单个SimpleXMLElement
. (是的,即使一个元素只能有一个父元素,你仍然必须把它作为数组的第一个成员([0]
)。-
$scode->Items->Product->Price
应更改为仅$scode->Price
.
对 PHP 代码的这些修改:
<?php
$response = <<<XML
<Items>
<Product>
<Item Code="123">
</Item>
<Price>170
</Price>
</Product>
<Product>
<Item Code="456">
</Item>
<Price>150
</Price>
</Product>
</Items>
XML;
$xml = simplexml_load_string($response);
function loadNode($code) {
global $xml;
$scode = $xml->xpath('//Item[contains(@Code,' . $code . ')]/..')[0];
echo $scode->Price;
}
loadNode("123");
?>
运行时将产生以下输出:
170
不出所料。