【发布时间】:2014-08-06 09:06:22
【问题描述】:
我正在尝试在 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 标签中没有应用命名空间,我之后是在传入时应用 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>
如果有人能指出我做错了什么,那就太好了。我相信这与我没有使用 xsl: 类型元素作为 soapenv:Envelop 元素的事实有关,但我不确定如何声明它并包含命名空间。
干杯
【问题讨论】:
标签: xml xslt namespaces