PHP - использование XPATH для ссылки на элемент XML с 2 атрибутами
Я использую 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>
который имеет только один атрибут - с именем "категория".
$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>";
}
Любой совет? Спасибо!
2 ответа
В вашем xpath
-выражения, вам нужно выбрать <product>
и сохранить условие в []
:
/products/product[shipping/@carrier='$shippingCarrier']
а также...
/products/product[shipping/@cost='$shippingCost']
Кроме того, вам нужно установить $shippingCost
в "10.99"
вместо "UPS"
выбрать данные.
увидеть это работает: https://eval.in/128925
Вы должны использовать
/products/product/shipping[@carrier='$shippingCarrier']
так как shipping
не является прямым ребенком products
,
Вы также можете искать всех потомков, как это:
/products//shipping[@carrier='$shippingCarrier']