Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 使用节点的XPATH访问节点值的XSLT_Xml_Xslt_Xpath - Fatal编程技术网

Xml 使用节点的XPATH访问节点值的XSLT

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请求中提取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>

得到
订单请求
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。