Разбор XML-файла с использованием xpath и xquery - PullRequest
0 голосов
/ 08 октября 2010

У меня есть XML-файл

<category>
    <type name="SWEATERS">
        <product id =1>
            <itemNumber>1</itemNumber>
            <name>ProductA2</name>
            <price>345</price>
        </product>
        <product id=2>
            <itemNumber>4</itemNumber>
            <name>Product Test </name>
            <price>456</price>
        </product>
    </type>
</category>

Я использовал xquery

$xml->xpath('//category/type/product[@id=1]');

Когда я использовал этот xquery, я получаю только имя и цену. Как я могу получить имя типа«СВИТЕРЫ» вместе с названием и ценой

Ответы [ 4 ]

1 голос
/ 08 октября 2010

Когда я использовал этот xquery, я получаю только название и цена. Как я могу получить имя типа «СВИТЕРЫ» вместе с название и цена

Выражение XPath 1.0 должно быть:

//category/type/product[itemNumber=1]/*[self::name or self::price]|
//category/type[product[itemNumber=1]]

Или более статично:

//category/type/product[itemNumber=1]/*[self::name or self::price]|
//category/type[@name='SWEATERS']
1 голос
/ 08 октября 2010

Если вы хотите выбрать тип элемента, вы должны изменить выражение на:

//category/type[product/itemNumber=1]

Или просто имя:

//category/type[product/itemNumber=1]/@name

0 голосов
/ 08 октября 2010

вы можете попробовать что-то вроде:

$xml->xpath('//category/type[product/itemNumber=1]/(@name | product[itemNumber=1]/(name | price))');

это выбирает один атрибут и два элемента. | является оператором объединения

0 голосов
/ 08 октября 2010

Боюсь, вы не можете сделать это с помощью одного запроса с Xpath, но вы можете сделать это с помощью DOMNode->parentNode.

...