私は単純なXMLファイルをXSLTで変換する必要があります。結果は元のXML入力ファイルと生成されたStringでなければなりません。文字列は、XMLファイルの値から生成されます。XSLTでドキュメントに新しい行を追加するには?
生成は簡単ですが、完全な元のXMLコンテンツを出力XMLに挿入するにはどうすればよいですか?
私は単純なXMLファイルをXSLTで変換する必要があります。結果は元のXML入力ファイルと生成されたStringでなければなりません。文字列は、XMLファイルの値から生成されます。XSLTでドキュメントに新しい行を追加するには?
生成は簡単ですが、完全な元のXMLコンテンツを出力XMLに挿入するにはどうすればよいですか?
XSLT 1.0とXMLの完全なコピー。必要に応じて出力エンコーディング(このサンプルではUTF-8)とインデント(=はい)の必要性を変更します。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- Default: copy everything -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
そして、あなたは最終用途でこれをテキストの1行を追加する場合:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- add a line of text at the end of the xml -->
<xsl:template match="/">
<xsl:apply-templates/>
<xsl:text>your line of text</xsl:text>
</xsl:template>
<!-- Default: copy everything -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
(テキスト行で)最後の解決策は、有効なXMLを作成しないことに注意してください!
copy-of
要素は、基本ノードまたはxmlファイルのいずれかで直接使用することをお勧めします。例えば
、ここで <xsl:copy-of select="document('style.xml')/"/>
ありがとう、私の場合私はその有効なXMLかどうか気にしない。私が理解していないのは、追加の行を作成する部分がコピー手順の前に呼び出される理由です。それはもう一方の方法でなければならないのでしょうか? – martin
テンプレートは、対応するノードに一致します。あなたが最初に書くのは重要ではありません。ノード '/'はルートノードです(すべてのxmlにルートノードがあります)。このルートノードでは、すべての子と属性にテンプレートを適用します。属性と子は '@ * | node()'でテンプレートにマッチします。そして、このテンプレートはすべてをコピーし、一致するテンプレートをすべての属性とノードに再度適用します(したがって、それ自身を呼び出します)。 – therealmarv