Xml 使用节点的XPATH访问节点值的XSLT
我试图在以下XML请求中提取messageIdentifier的值:Xml 使用节点的XPATH访问节点值的XSLT,xml,xslt,xpath,Xml,Xslt,Xpath,我试图在以下XML请求中提取messageIdentifier的值: <?xml version="1.0"?> <ordersRequest> <requestHeader> <verb>get</verb> <transaction>OrderRequest</transaction> <version>1.0</version> <consumer>Web</con
<?xml version="1.0"?>
<ordersRequest>
<requestHeader>
<verb>get</verb>
<transaction>OrderRequest</transaction>
<version>1.0</version>
<consumer>Web</consumer>
<messageIdentifier>123456789</messageIdentifier>
</requestHeader>
</ordersRequest>
得到
订单请求
1
网状物
123456789
其目的是将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
。当我使用下面的编辑应用上面的样式表时,我在输出中得到值123456789
。为什么输出有差异。请提供帮助。有关可以使用的简单子元素选择
<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代码并在第二步中执行。您需要的是计算作为字符串给出的XPath表达式。据我所知,这只在XSLT3.0中可能实现。您可以使用XPath生成XSLT,然后执行生成的XSLT。