Как мне перебрать / выбрать пары элементов с помощью xpath (1.0)? - PullRequest
0 голосов
/ 24 декабря 2018

У меня есть xml с парами элементов a и b. И я хотел бы пройтись по ним и выполнить некоторую работу, но не могу найти самый простой способ сделать это.Я использую C # и хочу предложения, используя .Net.Я пробовал XmlDocument, XPathNavigator и XmlReader, но застрял.

Я хочу сначала найти «а», а затем, если есть «б», я хочу обработать это.Затем я хочу найти следующее «а» и т. Д.

Я думаю, что я хочу что-то вроде NextSibling на уровне ниже root, но когда я обрабатываю элементы ниже a или b, я теряюсь с помощью указателя / навигатора.

<root>
   <a>
        <child 1 />
    </a>
    <b>
         <child 2/>
    </b>
    <a>
        <child 1 />
    </a>
    <b>
        <child 2/>
    </b>
.......
</root>

С уважением, Мартин

Ответы [ 3 ]

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

Если вы используете последнюю версию XPath (3.0 или 3.1), вы можете сделать это с помощью функции for-each-pair():

let $process := function($a, $b) { (: do something :) }
return for-each-pair(//a, //a/following-sibling::*[1][self::b], $process)
0 голосов
/ 22 февраля 2019

В итоге я подумал об обратном, набрал все буквы "b" и затем нашел последний "a", чтобы получить необходимую мне информацию

Выбрать все "b"

//b

и затем выбрал последний «a» предшествующий ток «b», чтобы получить нужное мне значение.

(preceding-sibling::a)[last()]

Спасибо за вдохновение!

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

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

<xsl:template match="/root/a">
    ...
    <xsl:for-each select="following-sibling::*[1][self::b]">
    ...
    </xsl:for-each>
</xsl:template>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...