Как извлечь только данные, соответствующие строке в Xpath - PullRequest
1 голос
/ 28 ноября 2011

Когда выражение Xpath применяется к / data / title , отображаются следующие результаты: «Все соединения», «Детали пересылки», «Детали пересылки», «Детали пересылки», «Детали пересылки» , 'ABCD', ... и т. Д.

Мое выражение xpath должно отображаться в списке только в том случае, если / title имеет значение «Forward Detail» или «Forward Details» ...

<?xml version="1.0" encoding="UTF-8"?>
<data>
<title>All the connections</title>
<List>
    <Listitem>
        <Price>P9909</Price>
    </Listitem>
</List>
<title>Forward Detail</title>
<List>
    <Listitem>
        <Price>P45</Price>
    </Listitem>
    <Listitem>
        <Price>P98</Price>
    </Listitem>
    <Listitem>
        <Price>P68</Price>
    </Listitem>
</List>
<title>Forward Details</title>
<List>
    <Listitem>
        <Price>P452</Price>
    </Listitem>
    <Listitem>
        <Price>P983</Price>
    </Listitem>
</List>
<title>Forward Detail</title>
<List>
    <Listitem>
        <Price>P4501</Price>
    </Listitem>
    <Listitem>
        <Price>P909</Price>
    </Listitem>
    <Listitem>
        <Price>P899</Price>
    </Listitem>
</List>
<title>Forward Details</title>
<List>
    <Listitem>
        <Price>P4522</Price>
    </Listitem>
    <Listitem>
        <Price>P98311</Price>
    </Listitem>
</List>

из этих входных данных, я должен извлечь цену только «Forward Detail» и «Forward Details». Я должен игнорировать все остальное.

Пожалуйста, помогите мне в создании Xpath для этого. Я использую Xpath 1.0

Спасибо Рамм

Ответы [ 2 ]

3 голосов
/ 28 ноября 2011

Попробуйте, если у вас работает следующая команда:

/data/title[text() = "Forward Detail" or text() = "Forward Details"]/following-sibling::*[1]/descendant::Price

Мой результат:

<Price>P45</Price>
<Price>P98</Price>
<Price>P68</Price>
<Price>P452</Price>
<Price>P983</Price>
<Price>P4501</Price>
<Price>P909</Price>
<Price>P899</Price>
<Price>P4522</Price>
<Price>P98311</Price>
2 голосов
/ 28 ноября 2011

Вам нужно условие.Что-то вроде /data/title[text() == 'Forward Detail'].

Однако я подозреваю, что вам действительно нужен Список, которому предшествует заданный заголовок, верно?Ваш XML плохо спроектирован для этого (вместо него должен быть заголовок внутри элемента <List>), но XPath достаточно способен справиться.Вам нужно взглянуть на ось sibling и функцию pos().

Я бы сам посмотрел в документации, поэтому я просто делаю это вики сообщества;кто-нибудь, не стесняйтесь переписать.

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