XPath Получить следующий узел с локальным именем из-за изменения пространства имен - PullRequest
0 голосов
/ 13 декабря 2018

Я просмотрел пару предыдущих вопросов о том, как выбрать следующего брата, но, похоже, не могу этого сделать, когда пытаюсь игнорировать пространство имен для выбора следующего элемента.

Это пример XML

<root xmlns:foo="http://www.foo.org/">
    <foo:singers>
        <foo:singer>Tom Waits</foo:singer>
        <foo:value>4000</foo:value>
        <foo:singer>B.B. King</foo:singer>
        <foo:value>2000</foo:value>
    </foo:singers>
</root>

Я хочу получить значение после узла на основе его значения, например, 4000 после Тома Уэйтса.

Что у меня естьпока что

//*[local-name()='singer' and text() = 'Tom Waits']/following-sibling::*//*[local-name() = 'value']

К сожалению, это не работает для меня.

Я могу сделать что-то вроде

//*[local-name()='singer' and text() = 'Tom Waits']/following-sibling::foo:value/text()

, и это работает, но я бы предпочел бытьвозможность игнорировать пространство имен 'foo'.

1 Ответ

0 голосов
/ 13 декабря 2018

Вы были близки с тем, что у вас есть.
Все, что вам нужно, это заменить *//* на * после following-sibling

//*[local-name()='singer' and text() = 'Tom Waits']/following-sibling::*[local-name() = 'value']/text()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...