在运行时使用动态变量创建 XPath(XSL 版本 1.0)->然后将其用作选择



我已经在这里阅读了一些关于这个主题的页面,但到目前为止,没有任何内容与我的问题相匹配。所以我的问题是,我需要动态地创建一个xpath字符串,并在选择"<xsl:value of&quot-标记从xml文档中选择适当的值。但是它显示的却是xpath本身的字符串,如下所示

所以我有一个简单的XML文档(只是一个小例子来说明这个问题。原始文档更大,包含更多的字段(

<s0:RootNode>
<s0:HEADER>
<s0:DocumentDate>2022-10-13</s0:DocumentDate>
<s0:DocumentID>123456</s0:DocumentID>
</s0:HEADER>
</s0:RootNode>

在这里,我动态创建xPath字符串:

<!-- This ('DocumentID') will be a dynamic value later on --> 
<xsl:variable name="varField" select="'DocumentID'"/>
<!-- The output of that variable is the correct xPath 's0:HEADER/s0:DocumentID/text()' I want to use. -->
<xsl:variable name="xPath" select="concat('s0:HEADER/s0:',$varField,'/text()')" />

所以我的地图

<Value>
<xsl:value-of select="$xPath" />
</Value>

将产生输出:

<Value>s0:HEADER/s0:DocumentID/text()</Value>

而不是:

<Value>123456</Value>

那么,我如何"强制"基于通用xpath字符串而不是xpath字符串本身来选择值123456呢?

非常感谢你的帮助。

您可以将元素名称设为变量。你可能不需要s0:RootNode。只需根据你的情况进行调整。

<!-- This ('DocumentID') will be a dynamic value later on -->
<xsl:variable name="varField" select="'DocumentID'"/>
<xsl:variable name="test">
<Value>
<xsl:value-of select="s0:RootNode/s0:HEADER/s0:*[local-name() = $varField]" />
</Value>
</xsl:variable>

最新更新