2011-01-12 9 views
1

私はdocbookを使用しています。テーブルエントリにゼロ幅の文字を挿入するテンプレートを使用しています。どちらが良いですが、テーブルエントリに<para>要素が含まれている場合、NOTが適用されている必要があります。だから、<para>を含まないすべての<entry>にテンプレートを適用する方法はありますか?XSLT:特定のサブノードを含まないノードにテンプレートを適用する

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:d="http://docbook.org/ns/docbook"> 
<xsl:import href="urn:docbkx:stylesheet"/> 

... 

<xsl:template match="text()[parent::d:entry]"> 
    <xsl:call-template name="intersperse-with-zero-spaces"> 
     <xsl:with-param name="str" select="."/> 
    </xsl:call-template> 
</xsl:template> 

... 

答えて

2

<xsl:template match="d:entry[not(d:para)]">任意のpara子供を持っていない任意のentry要素にマッチします。 <xsl:template match="d:entry[not(descendant::d:para)]">は、para子孫を持たないすべてのentry要素に一致します。

投稿したテンプレートの場合は、<xsl:template match="text()[parent::d:entry[not(d:para)]]">を使用できます。

+0

これは正しいです。しかし、フォワードとバックワード軸の最後の渋滞...なぜ、d:entry [not(d:para)]/text() 'ではないのですか? –

+0

Alejandro、 'd:entry [not(d:para)]/text()'は 'text()[parent :: d:entry [not(d:para)]よりも簡単です。 ]と私はおそらく私が自分自身で始めるときにそれを書くだろう。しかし、私は最初の記事で 'text()[parent :: d:entry]'を使い始めることにしました。それが私のやり方です。あなたがまだ読んでいるのであれば、 'match =" d:entry [not(d:para)]/text() "'の代わりに '' parent = d:entry [ (d:パラ)]] "" –

1
<xsl:template match="text()[parent::d:entry[not(.//d:para)]]"> 
    <xsl:call-template name="intersperse-with-zero-spaces"> 
     <xsl:with-param name="str" select="."/> 
    </xsl:call-template> 
</xsl:template> 
関連する問題