我有一个类似下面的XML,我正在尝试执行xpath查询并使用simplexml解析它。 XML是CURL响应,存储在$response
变量中。我需要查看Code
中的<Item>
属性,然后选择父<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");
这是我得到的通知:
注意:尝试获取非对象的属性
答案 0 :(得分:1)
一些观察结果:
xpath()
方法返回SimpleXMLElement
的数组
对象,而不是单个SimpleXMLElement
。 (是的,即使只有一个元素的父元素,你仍然必须将它作为数组的第一个成员([0]
)。$scode->Items->Product->Price
应该改为just
$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
正如所料。