【发布时间】:2013-11-01 02:32:56
【问题描述】:
我有一个类似下面的 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");
这是我收到的通知:
注意:试图获取非对象的属性
【问题讨论】:
-
SimpleXMLElement::xpath()返回一个数组,而不是 SimpleXMLElement 对象。 -
xpath 看起来还不错,你可能想使用
sprintf()和%d可能是prevent xpath injection:list($scode) = $xml->xpath(sprintf('//Item[contains(@Code, "%d")]/..', $code);,你可能对:How to get useful error messages in PHP? 感兴趣。跨度>