私は、いったんXSLTのトラバーサルがどのように機能するのかについて合理的な理解が得られたら、これは非常に簡単になると思います。
これを行う方法にはいくつかの選択肢があります。 Darrell Millerの答えは、ドキュメント全体を処理し、興味のない要素を取り除かなければならないことを示しています。これは1つのアプローチです。
さらに進む前に、XSLTでコンテキストの概念を完全に「取得」しないかもしれないという印象を受けます。これは重要であり、あなたの人生をよりシンプルにします。 XSLTではいつでもコンテキストノードが1つしかありません。これは現在「処理中」のノード(要素、属性、コメントなど)です。 via xsl:templateを選択すると、選択されたノードがコンテキストノードになります。だから、あなたのxml与えられた:
<alpha_top>This prints.
<beta>This doesn't.
<alpha_bottom>This too prints.</alpha_bottom>
</beta>
</alpha_top>
と、次の
<xsl:apply-templates select='beta'/>
と
<xsl:template match='beta'>...</xsl:template>
ベータノードは、テンプレート内のコンテキストノードになります。それよりももう少しですが、それほど多くはありません。
だから、あなたのようなもので、あなたのスタイルシートを起動したとき:
<xsl:template match='/'>
<xsl:apply-templates select='alpha_top'/>
</xsl:apply-templates>
あなたは(唯一の子要素がalpha_top要素である)文書ノードの子を選択しています。内部のxpathステートメントはコンテキストノードに関連しています。
ここで、その最上位テンプレートでは、alpha_bottomノードのみを処理することにします。そして、次のような声明に入れることができます:
<xsl:template match='/>
<xsl:apply-templates select='//alpha_top'/>
</xsl:template>
これはツリーを歩くと、すべてのalpha_top要素と他には何を選択することになります。
代わりにすべてのあなたの要素を処理し、単にベータノードの内容を無視することもできます
<xsl:template match='beta'>
<xsl:apply-templates/>
</xsl:template>
(私はあなたのxslに私の他の回答で述べたように:なしselect属性で、テンプレートを適用は同じですselect = '' *)を使用しています。
これはベータノードのコンテンツを無視しますが、ベータノードのすべての子プロセスを処理します(テンプレートがあると仮定します)。
したがって、出力の要素を無視することは、基本的には、選択属性で正しいxpathステートメントを使用することです。もちろん、あなたがあなたの問題におそらく最も簡単な解決策はこれで良いのXPathチュートリアル:)
ありがとう、私は朝にこれを見ます。 XSLTのリソースに関する私の質問を見ていただけますか?今、私は重く飲むつもりです。 – chernevik