У меня есть некоторые 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
}
Привет. Я обновил свой вопрос, используя ваш ответ, и я получаю «массив для преобразования ошибки преобразования» при попытке вывода элементов –
Я не очень хорошо знаю о PHP. Но для решения этой проблемы вы можете следовать http://stackoverflow.com/questions/12959196/array-to-string-conversion-error-in-php link –
Вы используете другой XPath для тегов имен, вам придется сверните его результат. –