我使用了2 xslt来生成预期的输出,但是我得到了输出,其中子元素被分组并以文本形式提供。
那么,你能否告诉我
1)可以在XSLT 2中添加什么来生成所需的输出。 2)组合2 xslt并将其作为单个xslt呈现的方法。 3)更好的编写xslt的方法来生成所需的输出。
详情
输入
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:from="http://from_sap.interfaces.oms">
<soap:Header/>
<soap:Body>
<from:fnsetEngineReleased>
<from:strPO>DDDD</from:strPO>
<from:strEngine>ASAS</from:strEngine>
</from:fnsetEngineReleased>
</soap:Body>
</soap:Envelope>
预期输出
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
xmlns:from="http://from_sap.interfaces.oms">
<soap:Header/>
<soap:Body>
<from:fnsetEngineReleased>DDDDASAS</from:fnsetEngineReleased>
</soap:Body>
</soap:Envelope>
获得的输出
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="*">
<xsl:element name="{local-name()}">
<xsl:apply-templates select="node()|@*"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
XSLT1 - 删除命名空间
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/*">
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:from="http://from_sap.interfaces.oms" >
<soap:Header></soap:Header>
<soap:Body>
<xsl:element name="from:{local-name()}" namespace="http://from_sap.interfaces.oms">
<xsl:apply-templates select="node()|@*" />
</xsl:element>
</soap:Body>
</soap:Envelope>
</xsl:template>
</xsl:stylesheet>
XSLT2 - 添加命名空间
{{1}}
答案 0 :(得分:1)
两个名称空间都是相同的。你不需要任何花哨的东西,只需将输入复制到输出中,你想要的就是把它包装成一个SOAP信封:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
version="1.0">
<xsl:template match="/">
<soap:Envelope>
<soap:Header/>
<soap:Body>
<xsl:copy-of name="*"/>
</soap:Body>
</soap:Envelope>
</xsl:template>
</xsl:stylesheet>