2016-10-14 12 views
0

<xsl:apply-templates>に関する質問があります。XSLT:<apply-templates select = "...">

<transcription> 
<subst>  
    <del>wrong</del> 
    <add>right</add> 
</subst>  
</transcription> 

は今、私はXSLTを使用してさまざまな方法で転写のこの記録を処理したい:

は、私は(http://www.tei-c.org/release/doc/tei-p5-doc/en/html/ref-subst.htmlを参照)、このようなXMLを持っていると仮定します。

私は、ユーザーに訂正を提示したい場合は、私はこのようなXSLTテンプレートを使用することができます。

<xsl:template match="subst"><xsl:apply-templates select="./add"/></xsl:template> 

<xsl:template match="subst/add"><xsl:apply-templates/></xsl:template> 

しかし、私も書くことができます:最初のケースで

<xsl:template match="subst"><xsl:apply-templates/></xsl:template> 

<xsl:template match="subst/add"><xsl:apply-templates/></xsl:template> 

<!-- del: ignore contents --> 
<xsl:template match="subst/del"></xsl:template> 

を私はadd<subst>の中に明示的にしか指定せず、<del>を無視します。

2番目のケースでは、要素と何もしないテンプレートを指定することで、同じ効果が得られるので、私は<del>を無視します。

私が間違っていない場合、2つの方法は同等です。どれが望ましいですか?

+0

あなたの入力に 'subst'はありませんので、' 'は何もしません。 –

+1

あなたはテンプレートを持っていないので、あなたは "delを無視していません"。それはデフォルトのテンプレートに当てられます。 –

+0

申し訳ありませんが、subst要素を追加するのを忘れていました。 Thx、Stefan、あなたのコメントは役に立ちました! – user130685

答えて

1

IMHOでは、空のテンプレートで処理するよりもノードを処理しない方が望ましいです。しかし、場合によっては、より便利な場合もあります。コードを読みやすくするためです。

+0

最初のケース(selectの式)は、http://stackoverflow.com/questions/33049741/what-does-it-mean-apply-templates-select – user130685

+0

@ user130685を参照してください。 –

+0

"要素のすべての子要素を選択し、それらにマッチするテンプレートを適用します。したがって、式に一致しない要素はまったく処理されません。この場合、「それはデフォルトテンプレートに当てはまるでしょう」というコメントはどうでしょうか? – user130685