Как найти элемент в XML с помощью Xquery в XSLT - PullRequest
0 голосов
/ 18 мая 2011

В моем XSLT с использованием Xquery мне нужно найти значение для данного ключа:

<ExtendedProperties>
    <ExtendedProperty>
        <Key>AvailabilityStatus</Key>
        <Value>test</Value>
    </ExtendedProperty>
    <ExtendedProperty>
        <Key>HomeDelivery</Key>
        <Value>1</Value>
    </ExtendedProperty>
    <ExtendedProperty>
        <Key>LogisticNature</Key>
        <Value>1</Value>
    </ExtendedProperty>
</ExtendedProperties>

Пример: если я дам ключ AvailabilityStatus, я получу результат: test

1 Ответ

0 голосов
/ 19 мая 2011

Вот пример того, что я думаю вы пытаетесь выполнить. Я использую XSLT 2.0 и передаю строку поиска в качестве параметра в таблицу стилей. Если вам нужен XSLT 1.0, мы можем легко изменить пример.

Используя ваш образец XML и передавая «AvailabilityStatus» в качестве параметра searchString, этот XSLT 2.0:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="text"/>
  <xsl:strip-space elements="*"/>

  <xsl:param name="searchString"/>

  <xsl:template match="/">
    <xsl:value-of select="ExtendedProperties/ExtendedProperty[contains(lower-case(Key),lower-case($searchString))]/Value"/>
  </xsl:template>

</xsl:stylesheet>

производит желаемый (??) вывод:

test

Если вы хотите более точное соответствие, используйте = вместо функции contains() и удалите обработку lower-case().

EDIT

После прочтения комментариев в третий раз кажется, что вам действительно нужен XPath. XPath в моем примере XSLT, вероятно, не то, что вы ищете. Может быть, что-то вроде этого:

/ExtendedProperties/ExtendedProperty[Key='AvailabilityStatus']/Value

...