Intereting Posts

Запрос Xpath с PHP (возьмите два значения)

Вот код XML, с которым я работаю:

<inventory> <drink> <lemonade supplier="mother" id="1"> <title>Super Lemonade</title> <price>$2.50</price> <amount>20</amount> </lemonade> <lemonade supplier="mike" id="4"> <title>Lemonade Plus</title> <price>$3.00</price> <amount>20</amount> </lemonade> <pop supplier="store" id="2"> <title>Poppys</title> <price>$1.50</price> <amount>10</amount> </pop> </drink> </inventory> 

Затем я написал простой код для работы с XPath:

 <?php $xmldoc = new DOMDocument(); $xmldoc->load('sample.xml'); $xpathvar = new Domxpath($xmldoc); $queryResult = $xpathvar->query('//lemonade/price'); foreach($queryResult as $result){ echo $result->textContent; } ?> 

Этот код работает хорошо, выводя все значения цены лимонада, как ожидалось.

Теперь мне нужен XPATH, чтобы получить TITLE и ПОСТАВЩИК всех предметов с количеством = 20.

Как мне это сделать ?

спасибо

Использование :

 /*/*/*[amount = 20]/@supplier | /*/*/*[amount = 20]/title 

Это позволяет выбрать :

  1. Любой атрибут supplier любого элемента, который является grand-child верхнего элемента XML-документа (то же самое, что и /inventory/drink/lemonade , но мне нравится писать короткие выражения XPath), amount которых имеет строковое значение, которое равно литой к числу 20.

  2. Любой дочерний элемент дочернего элемента любого элемента, который является грандиозным элементом верхнего элемента XML-документа (то же, что и /inventory/drink/lemonade , но мне нравится писать короткие выражения XPath), amount ребенка имеет строковое значение, которое литой к числу 20.

Проверка на основе XSLT :

 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="text"/> <xsl:template match="node()|@*"> <xsl:for-each select= "/*/*/*[amount = 20]/@supplier | /*/*/*[amount = 20]/title"> <xsl:value-of select="."/> <xsl:text>&#xA;</xsl:text> </xsl:for-each> </xsl:template> </xsl:stylesheet> 

Когда это преобразование применяется к предоставленному XML-документу :

 <inventory> <drink> <lemonade supplier="mother" id="1"> <title>Super Lemonade</title> <price>$2.50</price> <amount>20</amount> </lemonade> <lemonade supplier="mike" id="4"> <title>Lemonade Plus</title> <price>$3.00</price> <amount>20</amount> </lemonade> <pop supplier="store" id="2"> <title>Poppys</title> <price>$1.50</price> <amount>10</amount> </pop> </drink> </inventory> 

он оценивает выражение XPath и копирует значения выбранных режимов в отдельных строках :

 mother Super Lemonade mike Lemonade Plus 

Обратите внимание :

Вашему обучению XPath можно очень помочь с помощью такого инструмента, как XPath Visualizer, который используется многими тысячами людей для изучения XPath.

В общем, вы хотите использовать прямые пути по // search, потому что это быстрее:

 /inventory/drink/lemonade[amount=20]/title 

а также

 /inventory/drink/lemonade[amount=20]/@supplier 

Вы можете комбинировать оба запроса XPath с | (UNION), который затем вернет четыре узла.

Программный доступ к атрибутам с DOM объясняется в:

  • Схват атрибута href элемента A

Вы можете найти хороший учебник по XPath в