私はhtmlに出力するXSLドキュメントを持っています。私は以下のように、対応するHTML出力ファイルで、これは複数のXML入力文書に変換を実行するためにfilelist.xmlを使用して、バッチ処理を実行したい:複数の出力ファイルに一致するテンプレート
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="text" indent="no"/>
<xsl:output method="html" indent="yes" name="html"/>
<xsl:template match="/">
<xsl:for-each select="//*:file">
<xsl:variable select="document(@url)" name="contents" />
<xsl:variable select="replace(@url,'[.]xml','.html')" name="newfile" />
Creating <xsl:value-of select="$newfile" />
<xsl:result-document href="{$newfile}" format="html">
<html><body>
Test run: <xsl:value-of select="$contents/testrun/@run" />
</body></html>
</xsl:result-document>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
どのように私は、これらの各ファイルにテンプレートを適用することができます、1つのファイルを処理しているのと同じですか?すなわち:
<xsl:template match="guidance">
ここで、「ガイダンス」はソースXMLのルートノードです。テンプレートをネストする必要があるので、これは間違っています。この問題に対する正しいアプローチは何でしょうか?
ありがとうございました。
ドキュメントfilelist.xmlがスタイルシートの入力ドキュメントの場合は、そのファイルのサンプル構造を表示してください。また、このファイルが処理したい他のファイルにリンクしている場合は、処理したいファイルのサンプルも表示してください。次に、各ファイルに対して作成する出力のサンプルを表示します。現在のところ、問題の内容がわかりません。あなたのスタイルシートに ' ... xsl:template>"を入れてから、それを適用することができます。 'xsl:apply-templates select =" $ contents/guidance "/>'の中の 'xsl:result-document'の中にあります。 –
良い質問、+1。ナチュラルで簡単な解決方法は私の答えをご覧ください。 –
「ルートルール」に問題が発生している可能性があります。このルールは**任意のドキュメント**のルートドキュメントと一致します。したがって、テンプレートを '$ contents'ドキュメントルートに適用する代わりに、' $ contents/node() 'を使用してください。 –