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']
Другие вопросы по тегам