2016-11-27 4 views
2

Вот часть моего файла XMLВыбор элементов на основе 2 дочерних элементов

<item> 
    <title>The product</title> 
    <description>Product description</description> 
    <oldprice>350</oldprice> 
    <price>250</price> 
    <category>KIDS DISCOUNT</category> 
    <link>page.htm</link> 
    <img>product.jpg</img> 
</item> 

Если я хочу продукты скидки, это нормально:

<?php 
     $xml = simplexml_load_file('file.xml'); 
     $items = $xml->xpath('//item/category[contains(.,"DISCOUNT")]/.. '); 
     foreach($items as $item){ 
      echo '<p>...</p>'; 
     } 
?> 

Если я хочу продукты меньше, чем 300, это OK:

<?php 
    $xml = simplexml_load_file('file.xml'); 
    $items = $xml->xpath('//item/price[.<300]/.. '); 
    foreach($items as $item){ 
     echo '<p>...</p>'; 
?> 

но если я хочу, и я не могу ... Я попробовал это, но это не так:

<?php 
    $xml = simplexml_load_file('file.xml'); 
    $items = $xml->xpath('//item/price[.<300] [//item/category[contains(.,"DISCOUNT")]]/.. '); 
    foreach($items as $item){ 
     echo '<p>...</p>'; 
?> 

Кто-нибудь может мне помочь?

ответ

0

Чтобы получить item, что либо имеет цену меньше, чем 300, или имеет категорию, содержащую текст «СКИДКА»:

//item[category[contains(.,"DISCOUNT")] or price[. < 300]] 

Если один item всегда имеет максимум один category и один price, вышеуказанное выражение может быть упрощена дальше:

//item[contains(category,"DISCOUNT") or price < 300] 

Если вы хотите выбран item выполнить вместо вместо этого, то просто замените or на and.

Смежные вопросы