XSLT - 没有XML标签的文本输出

时间:2015-06-18 15:27:25

标签: xslt-2.0

我使用了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}}

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>