我试图在以下XML请求中提取messageIdentifier的值:
<?xml version="1.0"?>
<ordersRequest>
<requestHeader>
<verb>get</verb>
<transaction>OrderRequest</transaction>
<version>1.0</version>
<consumer>Web</consumer>
<messageIdentifier>123456789</messageIdentifier>
</requestHeader>
</ordersRequest>
目的是将XPath信息传递给样式表,以便相同的XSL可用于任何其他请求(paymentRequest / requestHeader / messageIdentifier)以及requestHeader(paymentRequest / requestHeader / consumer)下的任何其他节点。我想出了以下XSL:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes" />
<xsl:param name="xpath" select="/" />
<xsl:template match="/">
<xsl:value-of select="concat('/*/requestHeader/',$xpath)" />
</xsl:template>
</xsl:stylesheet>
此处的输出显示为/*/requestHeader/messageIdentifier
。当我使用以下编辑<xsl:value-of select="/*/messageHeader/messageIdentifier" />
应用上述样式表时,我在输出中得到值123456789
。为什么输出有差异。请帮忙。
答案 0 :(得分:1)
对于简单的子元素选择,您可以使用
<xsl:param name="element-name" select="'messageIdentifier'"/>
然后
<xsl:value-of select="/*/requestHeader/*[local-name() = $element-name]"/>
如果你真的想动态执行XPath表达式,那么Marcus Rickert是对的,你需要XSLT 3.0和xsl:evaluate
或早期版本中的扩展函数或元素,然后依赖于处理器,或者你需要生成XSLT代码一个样式表并在第二步中执行。