我试图在soapenv:Header元素上设置一个基于传递给xslt的参数而更改的名称空间。
这是我正在使用的模板,预期的输出如下。
xslt的输入是3个参数,它们包含一个名称空间(该名称空间是变化的),请求方法和刚刚复制的消息正文。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">
<xsl:param name="RequestNameSpace" />
<xsl:param name="RequestMethod"/>
<xsl:param name="RequestMessageBody" />
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
<xsl:template match="/" >
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:myns="{$RequestNameSpace}">
<soapenv:Header/>
<soapenv:Body>
<xsl:element name="myns:{$RequestMethod}">
<xsl:copy-of select="$RequestMessageBody" />
</xsl:element>
</soapenv:Body>
</soapenv:Envelope>
</xsl:template>
</xsl:stylesheet>
当前输出,请注意soapenv:Envelope标记中未应用名称空间的情况,Im后面是要传入的RequestNameSpace的含义。
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:myns="{$RequestNameSpace}">
<soapenv:Header/>
<soapenv:Body>
<myns:hello_world>
<test_tag>Test output</test_tag>
</myns:hello_world>
</soapenv:Body>
</soapenv:Envelope>
如果有人能指出我在做什么错,那就太好了。我相信它与这个事实有关,即我没有为soapenv:Envelop元素使用xsl:type元素,但是我不确定我如何声明它并包含名称空间。
干杯
为什么不使用:
<xsl:element name="{$RequestMethod}" namespace="{$RequestNameSpace}">
<xsl:copy-of select="$RequestMessageBody" />
</xsl:element>
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句