使用XSLT更改部分SOAP信封



我想知道是否可以使用XSLT更改SOAP信封的一部分。我之所以只修改其中的一部分,是因为剩下的是一种动态的反应。

我有以下XML消息:

<SOAP-ENV:Body>
      <xyz:TheResponse Status="S" xmlns:xyz="namespace">
         <Hdr>
            <Sndr>
               ...
            </Sndr>
         </Hdr>
         <Command>
            ...
         </Command>
         <Data>
            ...
         </Data>
      </xyz:TheResponse>
   </SOAP-ENV:Body>

我正在使用以下XSLT:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:tns="namespace">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
    <xsl:template match="/SOAP-ENV:Body">
    <abc:SomeServiceResp xmlns:abc="SomePackage.SOAP.SomeService">
    <xsl:copy-of select="*"/>
    </abc:SomeServiceResp>
    </xsl:template>
</xsl:stylesheet>

XSLT的结果如下:

<SOAP-ENV:Body>
    <abc:SomeServiceResp xmlns:abc="SomePackage.SOAP.SomeService" xmlns:tns="namespace">
              <xyz:TheResponse Status="S" xmlns:xyz="namespace">
                 <Hdr>
                    <Sndr>
                       ...
                    </Sndr>
                 </Hdr>
                 <Command>
                    ...
                 </Command>
                 <Data>
                    ...
                 </Data>
              </xyz:TheResponse>
    </abc:SomeServiceResp>
</SOAP-ENV:Body>

我得到了预期的结果,它在我的回复中添加了这1行CCD_ 1。

然而,我打算更改第二行:

<xyz:TheResponse Status="S" xmlns:xyz="namespace">进入

<tns:TheResponse Status="S" xmlns:tns="namespace">保持"状态"不变,因为它是一个动态响应。

有人知道我该怎么做吗?

如何更改模板以匹配TheReoponse,然后执行如下显式名称空间转换:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet 
    version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:tns="namespace1"
    xmlns:SOAP-ENV="SOAP"
    xmlns:xyz="namespace">
  <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" />

    <xsl:template match="/SOAP-ENV:Body">
      <xsl:copy>
        <abc:SomeServiceResp xmlns:abc="SomePackage.SOAP.SomeService">
          <xsl:apply-templates/>
        </abc:SomeServiceResp>
      </xsl:copy>
    </xsl:template>
    <xsl:template match="xyz:TheResponse">
      <tns:TheResponse xmlns:tns="namespace">
        <xsl:attribute name="Status">
          <xsl:value-of select="@Status"/>
        </xsl:attribute>
        <xsl:copy-of select="*"/>
      </tns:TheResponse>
    </xsl:template>
    <xsl:template match="*">
      <xsl:copy>
        <xsl:apply-templates />
      </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

相关内容

  • 没有找到相关文章

最新更新