XSLT 如何在变量等于节点名称时获取值?
XSLT how to get value when variable equals Node name?
我继承了一个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>
我上面的属性行returns一个空字符串。当 $source 变量等于节点名称时,我需要做什么才能获取节点的值?
您需要检查子元素的 local-name
,所以
<xsl:attribute name="Source"><xsl:value-of select="$lookupFileSource/Source/codes/*[local-name() = 'AFW']"/></xsl:attribute>
When $source = "AFW", I want to get "XML-AP", and when $source = "SAGITTA", I want to get "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]}"/>
我继承了一个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>
我上面的属性行returns一个空字符串。当 $source 变量等于节点名称时,我需要做什么才能获取节点的值?
您需要检查子元素的 local-name
,所以
<xsl:attribute name="Source"><xsl:value-of select="$lookupFileSource/Source/codes/*[local-name() = 'AFW']"/></xsl:attribute>
When $source = "AFW", I want to get "XML-AP", and when $source = "SAGITTA", I want to get "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]}"/>