我已经在这里阅读了一些关于这个主题的页面,但到目前为止,没有任何内容与我的问题相匹配。所以我的问题是,我需要动态地创建一个xpath字符串,并在选择"<xsl:value of"-标记从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>