XPath выражение для извлечения значения атрибута - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть следующий XML:

<envelope>
    <action>INSERT</action>
    <auditId>123</auditId>
    <payload class="vendor">
        <fizz buzz="3"/>
    </payload>
</envelope>

Я пытаюсь написать выражение XPath, которое вытащит vendor (значение для атрибута payload class) или любое другое значение.

Мои лучшие попытки:

/dataEnvelope/payload[@class="vendor"]@class

Но для этого необходимо, чтобы выражение уже знало, что vendor является значением атрибута. Но если XML это:

<dataEnvelope>
    <action>INSERT</action>
    <auditId>123</auditId>
    <payload class="foobar">
        <fizz buzz="3"/>
    </payload>
</dataEnvelope>

Тогда я хочу, чтобы выражение вырвало foobar. Любые идеи, где я иду не так?

Ответы [ 3 ]

0 голосов
/ 16 ноября 2018

Во-первых, ваши два XML-файла не синхронизированы - один ссылается на envelope, а другой - на dataEnvelope.Поэтому, при необходимости, поменяйте одно на другое.

Итак, чтобы получить значение атрибута payload, вы можете использовать выражение XPath, подобное этому, которое использует значение дочернего атрибута, чтобы быть более конкретным:

/envelope/payload[fizz[@buzz='3']]/@class

Вывод:

vendor
0 голосов
/ 17 ноября 2018

Если элемент документа может / изменится, вы можете оставить XPath более универсальным и выбрать значение атрибута class из элемента payload, который является дочерним для любого элемента:

/*/payload/@class

Если вы знаете, что это всегда будет дочерний элемент envelope, то это будет более конкретно (но выше все равно будет работать):

/envelope/payload/@class
0 голосов
/ 16 ноября 2018

Если вам нужно @class значение из узла payload, вы можете использовать

/dataEnvelope/payload[@class]/@class

или просто

/dataEnvelope/payload/@class
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...