2011-02-17 4 views
1

私は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のルートノードです。テンプレートをネストする必要があるので、これは間違っています。この問題に対する正しいアプローチは何でしょうか?

ありがとうございました。

+0

ドキュメントfilelist.xmlがスタイルシートの入力ドキュメントの場合は、そのファイルのサンプル構造を表示してください。また、このファイルが処理したい他のファイルにリンクしている場合は、処理したいファイルのサンプルも表示してください。次に、各ファイルに対して作成する出力のサンプルを表示します。現在のところ、問題の内容がわかりません。あなたのスタイルシートに ' ..."を入れてから、それを適用することができます。 'xsl:apply-templates select =" $ contents/guidance "/>'の中の 'xsl:result-document'の中にあります。 –

+0

良い質問、+1。ナチュラルで簡単な解決方法は私の答えをご覧ください。 –

+0

「ルートルール」に問題が発生している可能性があります。このルールは**任意のドキュメント**のルートドキュメントと一致します。したがって、テンプレートを '$ contents'ドキュメントルートに適用する代わりに、' $ contents/node() 'を使用してください。 –

答えて

0

「ガイダンス」はソースXMLのルートノードです。テンプレートをネストする必要があるので、これは間違っています。この問題に対する正しいアプローチは何でしょうか?

xsl:template match = "guidance"を使用してテンプレートルールを定義するときに問題はありません。通常のXSLTの原則に従い、すべてのテンプレートルールが最外(グローバル)レベルで表示されます。テンプレートを呼び出すには、xsl:apply-templates select = "document(@href)/ガイダンス"のような操作を行います。

あなたは、(a)1つのスタイルシートモジュールに1つのドキュメントタイプのすべてのテンプレートルールを入れたり、(b)各ドキュメントタイプのテンプレートルールに異なるモードを使用することができます。私は 1つのファイルを処理していたかのように

0

は、どのように私は、これらの各ファイル 、同じにテンプレートを適用することができますか?

使用

<xsl:apply-templates select="$contents" mode="fileLevel"/> 

と1つのファイルを処理するためmode="filelevel"のあらゆる必要なテンプレートを提供しています。