XML 文書の内容を別の XML 文書に組み込み、それを xmlstarlet+XSLT で変換したいと考えています。XInclude を使用しようとしています。(私は XInclude と XSLT の両方の初心者です。) ただし、xmlstarlet は、インクルードされた XML ドキュメントを処理しません。インクルージョン ノードをそのままにしておくだけです。
ファイルa.xml
:
<?xml version="1.0" ?>
<doc xmlns:xi="http://www.w3.org/2001/XInclude">
a
<xi:include href="b.xml" />
b
</doc>
ファイルb.xml
:
<?xml version="1.0" ?>
<snippet>
c
</snippet>
「x.xsl
パススルー」テンプレート:
<?xml version="1.0" encoding="windows-1250" ?>
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" />
<xsl:template match="/">
<xsl:copy-of select="."/>
</xsl:template>
</xsl:transform>
実行するコマンドライン:
xmlstarlet tr x.xsl a.xml
期待される出力は、次のようなものになります。
<?xml version="1.0" ?>
<doc xmlns:xi="http://www.w3.org/2001/XInclude">
a
<snippet>
c
</snippet>
b
</doc>
それでも、私が得る結果は次のとおりです。
<?xml version="1.0"?>
<doc xmlns:xi="http://www.w3.org/2001/XInclude">
a
<xi:include href="b.xml"/>
b
</doc>
さて、私は何を間違っていますか?