如何在XSLT中使用Xquery在XML中查找元素

时间:2011-05-18 15:35:47

标签: xml xslt find xquery

在使用Xquery的XSLT中,我需要找到给定Key的值:

<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 :(得分:0)

以下是我想要完成的想法的示例。我正在使用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()处理。

修改

第三次阅读评论后,看起来你真正想要的是XPath。我的XSLT示例中的XPath可能不是您正在寻找的。也许是这样的:

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