XSLT で変更したい比較的単純な SOAP 応答メッセージ XML があります。
これが私がこれまでに持っているものです:
<?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>
Method1 = 特定の値の場合、Method1Result の下からエラーを削除するという考え方です。そうでない場合は、そのままにしておきます。私が現在持っているものは、それをしていません。ありがとう。
さらに明確にするための別の編集: 異なる Web サービス呼び出しに属する複数の XML ファイルに対して単一の XSLT ファイルが必要です。これは、Method1 がたとえば GetMeal、GetWindow、GetHandle、GetWeatherReport などのさまざまな値を持つことができることを意味します。テスト目的で予想される XML。毎回異なる要素を削除します。