我有一個相對簡單的Soap響應消息XML,我想用XSLT修改它。如何使用XSLT修改XML Soap響應?
這是我到目前爲止有:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
xmlns:z="http://some.url/WS/">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:variable name="Method" select="name(//soap:Body/*)" />
<xsl:template match="//soap:Body/*" >
<xsl:choose>
<xsl:when test="$Method='Method1Response'">
<xsl:call-template name="Method1" />
</xsl:when>
<xsl:otherwise>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="Method1" match="//soap:Body/z:Method1Response/z:Method1Result/z:Errors" />
</xsl:stylesheet>
示例XML:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing">
<env:Header xmlns:env="http://www.w3.org/2003/05/soap-envelope">
<wsa:Action></wsa:Action>
<wsa:MessageID></wsa:MessageID>
<wsa:RelatesTo></wsa:RelatesTo>
<wsa:To>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:To>
</env:Header>
<soap:Body>
<Method1Response xmlns="http://some.url/WS/">
<Method1Result>
<Msg>blah blah</Msg>
<Errors>
<ErrorItem>error 1</ErrorItem>
<ErrorItem>error 2</ErrorItem>
</Errors>
<Data />
</Method1Result>
</Method1Response>
</soap:Body>
</soap:Envelope>
的想法是從Method1Result下,刪除錯誤,如果方法1 =特定值。如果不是,請保持原樣。我現在有什麼,它不是這樣做的。謝謝。
另一個編輯,以進一步闡明: 我想有一個XSLT文件用於多個XML文件,屬於不同的Web服務調用。這意味着Method1可以有多個不同的值,例如:GetMeal,GetWindow,GetHandle,GetWeatherReport,...我希望爲同一個XSLT中的每個值創建一個「case」,以便有意地「打破」預期的XML用於測試目的。每次我將刪除一個不同的元素。
請編輯問題並指定轉換的確切結果。 –
你讓我們猜測哪些是「應該刪除的Method1Result下的幾個元素」,什麼是「如果Method1 =特定值」中的「特定值」 –