我正在尝试找到可以执行以下操作的XSLT。

我正在尝试将XML消息包装在一个快速的soap信封(xml)中。 源XML并不是一成不变的,因此XSLT不应该关心XML是什么。 它确实需要将XML声明从XML的顶部剥离。

例:

<?xml version="1.0"?>
<foo>
    <bar />
</foo>

转变为:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="urn:hl7-org:v3">
    <soapenv:Header/>
    <soapenv:Body>
          <foo>
            <bar />
          </foo>
    </soapenv:Body>
</soapenv:Envelope>  

例2:

<lady>
  <and>
   <the>
    <tramp />
   </the>
  </and>
</lady>



<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="urn:hl7-org:v3">
    <soapenv:Header/>
    <soapenv:Body>
         <lady>
           <and>
              <the>
                  <tramp />
             </the>
           </and>
         </lady>
    </soapenv:Body>
</soapenv:Envelope>  

===============>>#1 票数:2 已采纳

这个XSLT:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output omit-xml-declaration="yes" indent="yes"/>
    <xsl:template match="*">
        <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"  xmlns="urn:hl7-org:v3">
            <soapenv:Header/>
            <soapenv:Body>
                <xsl:copy-of select="/*"/>
            </soapenv:Body>
        </soapenv:Envelope>
    </xsl:template>
</xsl:stylesheet>

输出这个XML:

<soapenv:Envelope xmlns="urn:hl7-org:v3" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
   <soapenv:Header/>
   <soapenv:Body>
      <lady xmlns="">
         <and>
            <the>
               <tramp/>
            </the>
         </and>
      </lady>
   </soapenv:Body>
</soapenv:Envelope>

===============>>#2 票数:2

你可以使用它(类似于Phoenixblade9的答案,但不使用xsl:element

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output indent="yes"/>
    <xsl:strip-space elements="*"/>

    <xsl:template match="/">
        <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="urn:hl7-org:v3">
            <soapenv:Header/>
            <soapenv:Body>
                <xsl:copy-of select="*"/>
            </soapenv:Body>
        </soapenv:Envelope>
    </xsl:template>

</xsl:stylesheet>

  ask by Ryan Ternier translate from so

未解决问题?本站智能推荐:

关注微信公众号