我想知道是否可以使用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>