PHP - 使用XPATH引用具有2个属性的XML元素

时间:2014-03-29 18:57:20

标签: php xml xpath xml-attribute

我正在使用XPATH(使用PHP)来检索基于XML属性的XML数据。 XML结构是这样的:

<products>
<product category="Desktop">
<name> Dell Desktop (d)</name>
<price>499.99</price>
<shipping cost="10.99" carrier="UPS" />
</product>
</products>

此代码工作正常,因为它测试的XML元素<product>只有一个属性 - 名为“category”。

$productVar = "Desktop";
$x_path = $XMLproducts->xpath("/products/product[@category='$productVar']");
foreach($x_path as $Product) {
echo $Product->name . " - " . $Product->price . "<br>";
}

但接下来的两个foreach循环没有显示任何内容。他们测试具有两个属性的XML元素<shipping> - “cost”和“carrier”。

$shippingCarrier = "UPS";
$xpath = $XMLproducts->xpath("/products/shipping[@carrier='$shippingCarrier']");
foreach($xpath as $Product) {
echo $Product->name . " - " . $Product->price . "<br>";
}

$shippingCost = "UPS";
$xpath = $XMLproducts->xpath("/products/shipping[@cost='$shippingCost']");
foreach($xpath as $Product) {
echo $Product->name . " - " . $Product->price . "<br>";
}

有什么建议吗?谢谢!

2 个答案:

答案 0 :(得分:1)

你应该使用

/products/product/shipping[@carrier='$shippingCarrier']

因为shipping不是products的直接孩子。

你也可以找到这样的所有后代:

/products//shipping[@carrier='$shippingCarrier']

答案 1 :(得分:1)

xpath - 表达式中,您需要选择<product>并将条件保留在[]中:

/products/product[shipping/@carrier='$shippingCarrier']

和...

/products/product[shipping/@cost='$shippingCost']

此外,您需要将$shippingCost设置为"10.99"而不是"UPS"来选择数据。

看到它有效:https://eval.in/128925