ソース XML から一部をコピーしようとしています<xsl:copy>
。ルート要素を無視するため、手動で作成する必要があります (または、より良い方法があるかもしれません。アドバイスをお願いします)
ソース xml:
<?xml version="1.0" encoding="UTF-8"?>
<root xmlns:header="http://www.test.com/header" >
<file_header >
<header:Header>
<aaa>123</aaa>
</header:Header>
</file_header>
<someNode>
<bbb>234</bbb>
</someNode>
<target>
<ccc>ccc</ccc>
<ddd>ddd</ddd>
</target>
<target>
<ccc>eee</ccc>
<ddd>fff</ddd>
</target>
</root>
期待される結果:
<?xml version="1.0" encoding="UTF-8"?>
<root xmlns:header="http://www.test.com/header" >
<file_header >
<header:Header>
<aaa>123</aaa>
</header:Header>
</file_header>
<someNode>
<bbb>234</bbb>
</someNode>
</root>
私が使用している Xslt は次のようなものです。
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:header="http://www.test.com/header">
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/">
<xsl:element name="{node-name(node())}" namespace="{namespace-uri(node())}">
<xsl:copy>
<xsl:apply-templates select="//target[1]/preceding-sibling::node()"/>
</xsl:copy>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
結果は正しくありません。名前空間はすべての子ノードに表示されますが、ルートノードには表示されません...ばかげているように思えるかもしれませんが、助けてください、ありがとう!