当变量等于节点名称时,XSLT如何获取值?

时间:2019-11-01 12:46:33

标签: xslt xslt-1.0

我继承了XSLT 1.0项目,但我对XSLT并不了解。

我有一个带有代码列表的外部XML文件。我想使用此文件来基于变量获取节点的值。当$ source =“ AFW”时,我要获取“ XML-AP”;当$ source =“ SAGITTA”时,我要获取“ XML”。

XML查找文件的部分清单:

<codes name="AcordToMSA_CodeLists">
    <Source>
        <codes>
            <AFW>XML-AP</AFW>
            <SAGITTA>XML</SAGITTA>
        </codes>
    </Source>
</codes>

用于XML查找文件的XSLT:

<xsl:variable name="lookupFileSource" select="document('XSL/AcordToMSA_CodeLists.xml')/codes" />



<Home>
    <xsl:variable name="source" select="Top/ClientApp/Name"/>
    <xsl:attribute name="Source"><xsl:value-of select="$lookupFileSource/Source/codes[local-name() = 'AFW']"/></xsl:attribute>
</Home>

我上面的属性行返回一个空字符串。当$ source变量等于节点名称时,我该怎么做才能获取节点的值?

2 个答案:

答案 0 :(得分:1)

您需要检查元素孩子的local-name,所以

<xsl:attribute name="Source"><xsl:value-of select="$lookupFileSource/Source/codes/*[local-name() = 'AFW']"/></xsl:attribute>

答案 1 :(得分:0)

  

当$ source =“ AFW”时,我要获取“ XML-AP”;当$ source =“ SAGITTA”时,我要获取“ XML”。

我相信这将转化为:

<Home>
    <xsl:attribute name="Source">
        <xsl:value-of select="$lookupFileSource/Source/codes/*[name()=$source]"/>
    </xsl:attribute>
</Home>

或不久之后:

<Home Source="{$lookupFileSource/Source/codes/*[name()=$source]}"/>