输入:
<user>
<firstName>John</firstName>
<lastName>Doe</lastName>
</user>
输出:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v1="http://www.abc.com/v1">
<soapenv:Header/>
<soapenv:Body>
<v1:user>
<v1:firstName>John</v1:firstName>
<v1:lastName>Doe</v1:lastName>
</v1:user>
</soapenv:Body>
</soapenv:Envelope>
我能够通过使用身份转换在一个xsl中添加命名空间并使用另一个xsl添加soap标记来实现此目的 但是无法在单个xsl中完成。
任何人都可以帮我实现单个xslt
答案 0 :(得分:1)
您的源文档属于无命名空间,其余代码是静态的。要简单地为源文档中的元素添加前缀,请匹配它们( * )并创建前缀为v1
的副本,并应用具有namespace
属性的命名空间。下面的XSLT产生了你期望的结果:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output indent="yes"/>
<xsl:template match="/">
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:v1="http://www.abc.com/v1">
<soapenv:Header/>
<soapenv:Body>
<xsl:apply-templates />
</soapenv:Body>
</soapenv:Envelope>
</xsl:template>
<xsl:template match="*">
<xsl:element name="v1:{name()}" namespace="http://www.abc.com/v1">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:0)
编写一个匹配/
的模板,输出SOAP元素并在其中执行apply-templates
,然后您可以添加更改输入元素命名空间的模板。