выберите одноуровневое значение с условием

У меня есть xsl для выбора значений из документов, который отлично работает, но мне нужно добавить к нему условие, и я не могу понять, как это сделать. Исходный xml имеет повторяющийся узел, подобный этому:

<recurringNode><field1>1000</field1><field2>valueA</field2></recurringNode>

Чтобы выбрать значение поля2 на основе значения поля1, я использую эту инструкцию, и она отлично работает:

<xsl:value-of select=".//field1[text()='ABC']/following-sibling::field2/text()"/>

Но мне нужно его усилить. Мне нужно добавить условие ИЛИ, чтобы проверить значение в поле1. Условие будет:

field1 = 'ABC' или подстрока (field1, 0, 1) = 'X'

Можно ли этого достичь?

С уважением.

JT


person James Taylor    schedule 08.07.2020    source источник
comment
substring(field1, 0, 1)='X' Это никогда не будет правдой. Функция substring() считает с 1, а не с 0.   -  person michael.hor257k    schedule 08.07.2020
comment
Я знаю, он считает от 1 к 1 позиции, но все равно не работает.   -  person James Taylor    schedule 08.07.2020


Ответы (1)


Я бы сделал:

<xsl:value-of select="recurringNode[field1='ABC' or starts-with(field1,'X')]/field2"/>
person michael.hor257k    schedule 08.07.2020
comment
Не работает - бесполезное описание. Вы можете видеть, что это работает здесь: xsltfiddle.liberty-development.net/pNmCzsP - person michael.hor257k; 08.07.2020
comment
Теперь я вижу вашу точку зрения, спасибо. Ваше решение сильно отличается от моего первого подхода, но оно дает ответ на то, что я спросил. Я должен перефразировать вопрос. Допустим, у меня есть пара полей, а именно поле1 и поле2, мне нужно значение поля2 на основе того, что я нахожу в поле1. Я знаю, что эти поля всегда находятся парами в повторяющемся узле, имя которого нам неизвестно. Вот почему в инструкции xsl, которую я впервые опубликовал, вы не видите имя родительского/повторяющегося узла. Ваше решение основано на повторяющемся имени узла, мне нужно сделать это с моим первым подходом, возможно ли это? - person James Taylor; 08.07.2020
comment
Можно, но неудобно: <xsl:value-of select=".//field1[.='ABC' or starts-with(.,'X')]/following-sibling::field2"/>. Почему бы просто не заменить имя повторяющегося узла подстановочным знаком *? - person michael.hor257k; 08.07.2020
comment
Это именно то, что мне было нужно :) Большое спасибо. - person James Taylor; 08.07.2020