XSLT で変換しようとしている SOAP 要求があります。リクエストの各要素に名前空間修飾子を追加したいと考えています。ユーザーに必要な 2 つの異なる名前空間があります。変換しようとしている XML は次のとおりです。
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope" >
<soapenv:Header/>
<soapenv:Body>
<PingRq>
<RqUID>1</RqUID>
<RequestContext>
<ClientUserID>1</ClientUserID>
<ClientName>Big Company</ClientName>
<ClientApplication>
<AppName>TestApp</AppName>
<AppVersion>1</AppVersion>
</ClientApplication>
<ClientLangPref>En-US</ClientLangPref>
<ClientDt>Mar-29-2013</ClientDt>
</RequestContext>
</PingRq>
</soapenv:Body>
</soapenv:Envelope
これが私がそれを変換したいものです:
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope" >
<soapenv:Header/>
<soapenv:Body>
<PingRq namespace="http://www.ns1.com">
<RqUID namespace="http://www.ns2.com">1</RqUID>
<RequestContext namespace="http://www.ns2.com">
<ClientUserID namespace="http://www.ns2.com">1</ClientUserID>
<ClientName namespace="http://www.ns2.com">Big Company</ClientName>
<ClientApplication namespace="http://www.ns2.com">
<AppName namespace="http://www.ns2.com">TestApp</AppName>
<AppVersion namespace="http://www.ns2.com">1</AppVersion>
</ClientApplication>
<ClientLangPref namespace="http://www.ns2.com">En-US</ClientLangPref>
<ClientDt namespace="http://www.ns2.com">Mar-29-2013</ClientDt>
</RequestContext>
</PingRq>
</soapenv:Body>
</soapenv:Envelope>
ここに私のスタイルシートがあります
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select = "@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="PingRq">
<xsl:element name="{local-name()}" namespace="http://www.ns1.com">
<xsl:apply-templates select="@* | node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="PingRq/*">
<xsl:element name="{local-name()}" namespace="http://www.ns2.com">
<xsl:apply-templates select="@*|node()"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
これが私が得た結果です。
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
<soapenv:Header/>
<soapenv:Body>
<PingRq xmlns="http://www.ns1.com">
<RqUID xmlns="http://www.ns2.com">1</RqUID>
<RequestContext xmlns="http://www.ns2.com">
<ClientUserID xmlns="">1</ClientUserID>
<ClientName xmlns="">Big Company</ClientName>
<ClientApplication xmlns="">
<AppName>TestApp</AppName>
<AppVersion>1</AppVersion>
</ClientApplication>
<ClientLangPref xmlns="">En-US</ClientLangPref>
<ClientDt xmlns="">Mar-29-2013</ClientDt>
</RequestContext>
</PingRq>
</soapenv:Body>
</soapenv:Envelope>
子孫に空の名前空間属性を取得する理由がわかりません。誰でもアイデアを持っていますか?