xmlns="myNS"
ルートノードにxmlns属性()を追加したいトランスフォーメーションを書いています。
変換を適用すると、xmlns
属性はいくつかの子要素に含まれます。
ルート要素にのみ適用するように変換を変更する方法を理解できません。
XML
<db:result xmlns:db="http://www.sonicsw.com/esb/service/dbservice">
<db:resultSet version="1.1">
<db:row>
<id>a</id>
<value1>b</value1>
<value2>c</value2>
</db:row>
<db:row>
<id>a</id>
<value1>d</value1>
<value2>e</value2>
</db:row>
<db:row>
<id>a</id>
<value1>f</value1>
<value2>g</value2>
</db:row>
<db:row>
<id>a</id>
<value1>h</value1>
<value2>i</value2>
</db:row>
</db:resultSet>
</db:result>
XSLT
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:db="http://www.sonicsw.com/esb/service/dbservice"
exclude-result-prefixes="db">
<xsl:template match="/">
<xsl:for-each-group select="//db:row" group-by="id">
<xsl:sort select="id"/>
<xsl:apply-templates select="." mode="document"/>
</xsl:for-each-group>
</xsl:template>
<xsl:template match="db:row" mode="document">
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="myNS">
<id><xsl:value-of select="id"/></id>
<lines>
<xsl:apply-templates select="//db:row[id=current()/id]" mode="line"/>
</lines>
</root>
</xsl:template>
<xsl:template match="db:row" mode="line">
<line>
<valueof1><xsl:value-of select="value1"/></valueof1>
<valueof2><xsl:value-of select="value2"/></valueof2>
</line>
</xsl:template>
</xsl:stylesheet>
XML出力
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="myNS">
<id>a</id>
<lines>
<line xmlns="">
<valueof1>b</valueof1>
<valueof2>c</valueof2>
</line>
<line xmlns="">
<valueof1>d</valueof1>
<valueof2>e</valueof2>
</line>
<line xmlns="">
<valueof1>f</valueof1>
<valueof2>g</valueof2>
</line>
<line xmlns="">
<valueof1>h</valueof1>
<valueof2>i</valueof2>
</line>
</lines>
</root>
XMLの期待される出力
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="myNS">
<id>a</id>
<lines>
<line>
<valueof1>b</valueof1>
<valueof2>c</valueof2>
</line>
<line>
<valueof1>d</valueof1>
<valueof2>e</valueof2>
</line>
<line>
<valueof1>f</valueof1>
<valueof2>g</valueof2>
</line>
<line>
<valueof1>h</valueof1>
<valueof2>i</valueof2>
</line>
</lines>
</root>
注:この既存の投稿を見つけましたが、提案された解決策を適用する方法を理解できません: