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

问题描述:

我正在使用XPATH(使用PHP)根据XML属性检索XML数据。 XML结构是这样的:PHP - 使用XPATH引用具有2个属性的XML元素

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

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

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

但接下来的两个foreach循环不显示任何东西。他们测试了XML元素<shipping>,它具有两个属性 - “成本”和“载体”。

$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>"; 
} 

有什么建议吗?谢谢!

在你xpath -expressions,您需要选择<product>并保持条件[]

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

和...

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

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

看到它工作:https://eval.in/128925

+0

非常感谢!它正在工作! –

您应该使用

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

因为shipping不是products直接孩子。

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

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

谢谢。你提供的编码是正确的!但是,出于某种奇怪的原因,在foreach循环中的echo语句中,.... echo $ Product-> name。 “ - ”。 $产品 - >价格。 “
”; .....唯一显示的是连字符。 –