2016-03-23 14 views
0

私は、XSLTを使用して複数のファイルを結合して処理しようとしています。ここで私が働いている構造の種類の例です:私は「XSLT:ドキュメントを挿入してからテンプレートを適用するにはどうすればよいですか?

page.html

<html> 
    <head/> 
</html> 

head.html

<head> 
    <title /> 
</head> 

proc.xsl

<xsl:template match="/html/head"> 
    <xsl:apply-templates select="document('head.html')/head" /> 
</xsl:template> 

<xsl:template match="/head/title"> 
    <title>this is a contrived example</title> 
</xsl> 

page.htmlに対してproc.xslを適用する。すべて動作しますが、2番目のテンプレート要素の一致は、それを含むものではなくインクルードされたドキュメントからの相対的なものでなければならないことに注意してください。それは賢明ですか? apply-templates命令がインクルードされたドキュメントではなくインクルードドキュメントのコンテキストで動作するようにする方法はありますか?明確にするために

、私が探しています結果は次のとおりです。私も試した

<html> 
    <head> 
     <title>this is a contrived example</title> 
    </head> 
</html> 

には、このようなXSLファイルで/インポート:

head.xsl

<xsl:template match="/html/head"> 
    <head> 
     <title /> 
    </head> 
</xsl:template> 

アゲイン、これはヘッドマークアップを注入しますが、title要素の処理に失敗します。

+0

私はあなたの質問を理解していません。 2番目のテンプレート(または任意のテンプレート)の一致は、「含まれているドキュメントとの相対的なもの」(または任意のドキュメント)ではありません。 'apply-templates'命令は、それが呼び出されるコンテキストで動作します。あなたの例では、 'page.html'文書の'/html/head'の文脈で - それは親テンプレートによって確立された文脈ですから。実際の問題は何ですか? –

+0

申し訳ありませんが、私は専門用語が間違っていると確信しています。つまり、最初のテンプレートを最初のドキュメントに適用した結果ではなく、読み込まれたドキュメントと一致する、つまり/ htmlではなく、 '/ head'で始まる必要があります。私は後の結果の例を更新します。 –

+0

'match =" head/title "'または単に 'match =" title "'にテンプレートマッチを変更するだけで、 'head'がルート要素かどうかは関係ありません。 –

答えて

0

文書( 'head.html')/ head要素を現在の文書(またはルート要素ではない文書)に置くことはないので、/ html/headと解釈されるのは奇妙です。

これで、この要素を別のドキュメントにコピーして、その動作を本当に必要とする場合は、テンプレートを適用することができます。

<xsl:variable name="head"> 
    <html> 
     <xsl:copy-of select="document('head.html')/head" /> 
    </html> 
</xsl:variable> 

<xsl:apply-templates select="exsl:node-set($head)/html/head"/> 

おそらく?

+0

"あなたは文書( 'head.html')/ head要素を置かないでください...?私は自分がやっていることがまさにそれをしたと思った。私はこれが「xsltのやり方」ではないかもしれないと知っていますが、いくつかの文書を組み合わせることは、これが何とかサポートされる共通の十分なユースケースになると思います。 –

+0

document()関数には別の文書処理文書が含まれていないため、別のノードセットとして解析するだけです。私はそれが処理されているドキュメントに何かを加えることはできないと思いますが、それは不変です。解析された文書(ノード集合)はどこにも含まれておらず、他の文書(入力または出力) – alamar

関連する問題