0

解決できないと思われるxsltの問題が発生しています。現在、このテンプレートが一致しています。<xsl:template match="bodytext/p[position() = 4]">

そして、これはうまくいきます。4番目の段落がレンダリングされるとき、私はいくつかのコンテンツを含めます。問題は、<p>要素がクラスを持つことができる場合があることですclass="exclude"

<p>そのクラス属性を持つタグを除外する良い方法を見つけようとしています。<p class="exclude">問題は、「除外」クラスを持たない1番目、2番目、および3番目の段落をレンダリングしながら、4番目の段落の前または4番目の段落に必要な数だけ存在する可能性があることです。したがって、ドキュメントが次のようになっている場合:

<p></p>
<p class="exclude"></p>
<p class="exclude"></p>
<p class="exclude"></p>
<p></p>
<p class="exclude"></p>
<p></p>
<p></p>

テンプレートと一致させたいだけです:

<p></p>
<p></p>
<p></p>
<p></p>

別の例は、次の入力です。

<p></p>
<p></p>
<p></p>
<p class="exclude"></p>
<p class="exclude"></p>
<p class="exclude"></p>
<p class="exclude"></p>
<p class="exclude"></p>
<p class="exclude"></p>
<p></p>

および出力:

<p></p>
<p></p>
<p></p>
<p></p>

前もって感謝します

4

2 に答える 2

2

あなたはこのようにそれを行うことができます:

<xsl:apply-templates 
    select="bodytext/p[not(@class = 'exclude')][position() = 4]"/>

これがテストケースです。次の変換を適用します。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output omit-xml-declaration="yes" indent="yes"/>
    <xsl:strip-space elements="*"/>

    <xsl:template match="node() | @*">
        <xsl:copy>
            <xsl:apply-templates select="node() | @*"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="/">
        <xsl:apply-templates 
            select="bodytext/p[not(@class = 'exclude')][position() = 4]"/>
    </xsl:template>

</xsl:stylesheet>

に:

<bodytext>
    <p></p>
    <p class="exclude"></p>
    <p class="exclude"></p>
    <p class="exclude"></p>
    <p></p>
    <p class="exclude"></p>
    <p></p>
    <p>test</p>
</bodytext>

生産:

<p>test</p>
于 2012-06-14T13:26:56.113 に答える
0

使用する

<xsl:template match="@* | node()">
  <xsl:copy>
    <xsl:apply-templates select="@* | node()"/>
  </xsl:copy>
</xsl:template>

<xsl:template match="bodytext/p[@class = 'exclude']"/>

<xsl:template match="bodytext/p[not(@class = 'exclude')][4]">
  <xsl:copy>
    <!-- new content goes here -->
    <xsl:apply-templates/>
  </xsl:copy>
</xsl:template>
于 2012-06-14T13:49:28.510 に答える