XSLT を使用して xml タグの名前を変更する際に問題に直面しています。以下は私の入力xmlです。
元の XML:
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
<soapenv:Body>
<ns:Response xmlns:ns="http://demo.test.classes.com">
<ns:return>
<ns:person>
<ns:personName></ns:personName>
<ns:personAge></ns:personAge>
<ns:personAddress>
<ns:addressType>official</ns:addressType>
<ns:addressLine1>official address line 1</ns:addressLine1>
</ns:personAddress>
<ns:personAddress>
<ns:addressType>residence</ns:addressType>
<ns:addressLine1>residence address line 1</ns:addressLine1>
</ns:personAddress>
</ns:person>
</ns:return>
</ns:Response>
</soapenv:Body>
</soapenv:Envelope>
変換後に予期される XML: これは私が探している最終的な xml です!!!
<MyResponse>
<person>
<personName></personName>
<personAge></personAge>
<personAddress>
<addressType>official</addressType>
<addressLine1>official address line 1</addressLine1>
</personAddress>
<personAddress>
<addressType>residence</addressType>
<addressLine1>residence address line 1</addressLine1>
</personAddress>
</person>
</MyResponse>
これは、私が現在使用している XSLT です。しかし、これは必要なxmlを生成していません。問題は、テンプレートの match="ns:Response" を含めない場合、ルート タグが "Response" であることを除いて、生成された xml は上記の xml と似ており、私のニーズに完全に一致することです。しかし、match="ns:Response" を導入すると、xml は xml としてフォーマットされず、生成された xml には "MyResponse" の横に名前空間 xmlns:ns="http://demo.test.classes.com" が含まれます。鬼ごっこ。以下の xslt で何を変更する必要があるか教えてください。
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" />
<xsl:template match="/|comment()|processing-instruction()">
<xsl:copy>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:template match="*">
<xsl:element name="{local-name()}">
<xsl:apply-templates select="@*|node()" />
</xsl:element>
</xsl:template>
<xsl:template match="@*">
<xsl:attribute name="{local-name()}">
<xsl:value-of select="." />
</xsl:attribute>
</xsl:template>
<xsl:template xmlns:ns="http://demo.test.classes.com" match="ns:return">
<xsl:apply-templates/>
</xsl:template>
<xsl:template xmlns:ns="http://demo.test.classes.com" match="ns:Response">
<MyResponse><xsl:apply-templates select="node()|@*"/></MyResponse>
</xsl:template>
</xsl:stylesheet>