XSLT Схожая функциональность с SQL "WHERE LIKE" - PullRequest
2 голосов
/ 11 января 2011

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

        <Answer>
            <Label>FCVCMileage</Label>
            <Value>3258</Value>
            <Iteration>0</Iteration>
            <DataType>NUMBER</DataType>
        </Answer>

, и мне нужно получить значение под меткой «Пробег».Однако 4-буквенный префикс к Пробегу может быть любым из 8 различных префиксов.

Я знаю, что могу найти значение, проверяя каждую комбинацию, используя xsl: if или xsl: выбирать, но есть ли более элегантный способбудет работать аналогично следующему SQL и также не потребует внесения изменений в код, если будут добавлены другие префиксы.

WHERE label LIKE '%Mileage'

Примечание.Будет только 1 элемент метки, содержащий слово Пробег

Приветствия!

Ответы [ 2 ]

3 голосов
/ 11 января 2011
I know I could find the value by testing for every combination using xsl:if or xsl:choose but is there a more elegant way that would work similar to the following SQL and also wouldn't need changes to code being made if other prefixes were added.

    WHERE label LIKE '%Mileage'

В XPath 2.0 есть стандартная функция ends-with()

В XPath 1.0 используется :

/*[Label[substring(., string-length(.) - 6) = 'Mileage']]/value

Примечание :

  contains(Label, 'Mileage')

не эквивалентно приведенному выше предложению SQL .Например, он выберет этот узел:

<Label>xxx Mileage yyy</Label>
3 голосов
/ 11 января 2011
Answer[contains(Label, 'Mileage')]/Value
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...