2013-05-22 5 views
0

У меня есть некоторые XML в следующем форматенесколько фильтров с использованием XPATH

<root> 
<item> 
    <created>2013-05-21</created> 
    <name>Item 1</name> 
    <attributes> 
     <stock> 
     <amount>1</amount> 
     </stock> 
     <price>10</price> 
    </attributes> 
    </item> 
    <item> 
    <created>2013-05-21</created> 
    <name>Item 2</name> 
    <attributes> 
     <stock> 
     <amount>1</amount> 
     </stock> 
     <price>20</price> 
    </attributes> 
    </item> 
    <item> 
    <created>2013-05-21</created> 
    <name>Item 3</name> 
    <attributes> 
     <stock> 
     <amount>2</amount> 
     </stock> 
     <price>10</price> 
    </attributes> 
    </item> 
</root> 

Я пытаюсь получить следующее:

1 - Get all items that have a stock amount that is 1

2 - Get all of the filtered items that have a price greater than or equal to 15

Это означает, что в приведенном выше , результатом будет Item 2

я следующий до сих пор:

$xml = new SimpleXMLElement($xmlString); 
$xmlReturn = $xml->xpath("item[attributes/stock[contains(amount,'1')]]"); 

я могу затем перебрать и получить XML следующим образом:

foreach($xmlReturn as $node){ 
    echo $node->asXml(); 
} 

Проблема является второй частью xpath фильтра, получая цены больше 15.

Я пробовал:

$test = $xml->xpath("item[attributes/[price>15]]"); 

Но это дает мне ошибку:

Warning: SimpleXMLElement::xpath(): Invalid expression 

Могу ли я комбинировать два поиска в один фильтр?

Благодаря

ОБНОВЛЕНО

$data = 'XML DATA HERE'; 
$xml = new SimpleXMLElement($data); 
$xpath = $xml->xpath("//item[attributes[stock/amount='1'][price >= 15]]"); 

foreach($xpath as $node) 
{ 
    echo $node->xpath('name'); 
    // this throws a Notice: Array to string conversion error 
} 

ответ

1

Ваш полный XPATH, чтобы получить желаемый выход Item 2 является:

//item[attributes[stock/amount='1'][price >= 15]] 
+0

Привет. Я обновил свой вопрос, используя ваш ответ, и я получаю «массив для преобразования ошибки преобразования» при попытке вывода элементов –

+0

Я не очень хорошо знаю о PHP. Но для решения этой проблемы вы можете следовать http://stackoverflow.com/questions/12959196/array-to-string-conversion-error-in-php link –

+0

Вы используете другой XPath для тегов имен, вам придется сверните его результат. –

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