Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-使用XPATH引用具有2个属性的XML元素_Php_Xml_Xpath_Xml Attribute - Fatal编程技术网

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

PHP-使用XPATH引用具有2个属性的XML元素,php,xml,xpath,xml-attribute,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&

我正在使用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>
/products//shipping[@carrier='$shippingCarrier']

戴尔台式机(d)
499.99
这段代码运行良好,因为它测试XML元素
,该元素只有一个名为“category”的属性

$productVar=“桌面”;
$x_path=$XMLproducts->xpath(“/products/product[@category='$productVar']”);
foreach($x_路径作为$Product){
echo$Product->name.“-”$Product->price.“
”; }
但是接下来的两个foreach循环没有显示任何内容。他们测试XML元素
,该元素有两个属性——“cost”和“carrier”

$shippingCarrier=“UPS”;
$xpath=$XMLproducts->xpath(“/products/shipping[@carrier='$shippingCarrier']”);
foreach($xpath作为$Product){
echo$Product->name.“-”$Product->price.“
”; } $shippingCost=“UPS”; $xpath=$XMLproducts->xpath(“/products/shipping[@cost='$shippingCost']”); foreach($xpath作为$Product){ echo$Product->name.“-”$Product->price.“
”; }
有什么建议吗?谢谢

您应该使用

/products/product/shipping[@carrier='$shippingCarrier']
因为
配送
不是
产品
的直接子产品

您还可以像这样查找所有子代:

<products>
<product category="Desktop">
<name> Dell Desktop (d)</name>
<price>499.99</price>
<shipping cost="10.99" carrier="UPS" />
</product>
</products>
/products//shipping[@carrier='$shippingCarrier']

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

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

/products/product[shipping/@cost='$shippingCost']
此外,您需要将
$shippingCost
设置为
“10.99”
,而不是
“UPS”
来选择数据


看到它工作了吗:

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