0

次のようなソースhtmlがあります。

<p class="heading-8">Emergency Care<span class="char-style-override-68">, if not already done:</span></p>
<p class="List-Bullet-CHAM1-CHAM-1-List-Bullet-1 para-style-override-3"><span>  </span><span class="char-style-override-25">1.</span><span> Do Initial Assessment (p. 72).</span></p>

次に、p のテンプレート マッチを作成します。

<xsl:template match="x:p">
<xsl:choose>
 <xsl:when test="contains(@class,'heading-8')">
   <xsl:variable name="current-name" select="generate-id(.)"/>
   <xsl:variable name="noTable" select="count(preceding-sibling::x:table)"/>
   <p>
    <b>
        <xsl:apply-templates/>
    </b>
   </p>
            <xsl:if test="following-sibling::*[1][self::x:p][contains(@class,'List-Bullet-CHAM1-CHAM-1')][generate-id(preceding-sibling::x:p[contains(@class,'heading-8 ')][1]) = $current-name]">
                <ol>
                    <xsl:apply-templates select="following-sibling::x:p[contains(@class,'List-Bullet-CHAM1-CHAM-1')][count(preceding-sibling::x:table)=$noTable][generate-id(preceding-sibling::x:p[contains(@class,'heading-8 ')][1]) = $current-name]" mode="bullet"/>
                </ol>
            </xsl:if>
 </xsl:when>

私が今抱えている問題は、その内側の if ブランチに入ることができなかったように見えることです。しかし、ソース html はそれと完全に一致していると思います。どこが間違っているのかわかりません。

PS、私は generate-id() 関数を使用して、前の兄弟ノードの ID を判別しました。

4

2 に答える 2

1

私が見る限り、 xsl:if ステートメントのテスト条件は、 の末尾のスペースを除いて問題ないように見えますcontains(@class,'heading-8 ')。文字列「heading-8」を含むクラス属性はありません。xsl:if 要素と xsl:apply-templates 要素の両方のスペースを削除すると、問題が解決するはずです。

于 2012-04-25T20:22:43.630 に答える
0

if条件を過度に複雑にしている可能性があると思います。次の兄弟がpタグであり、特定のクラス属性を持っているかどうかを確認しているようです。'heading-8' のクラスを持つp要素に既に配置されているため、おそらく generate-id() について心配する必要はなく、次のように簡略化できます。

<xsl:if 
   test="following-sibling::*[1][self::x:p][contains(@class,'List-Bullet-CHAM1-CHAM-1')]"> 
于 2012-04-25T20:21:07.343 に答える