2012-04-25 54 views
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> 

我現在遇到的問題是,它似乎是我如果分支不能進入內部。但我認爲源html完全匹配它,只是不知道我可能是錯的。

PS,我使用了generate-id()函數來確定前一個兄弟節點的身份。

回答

1

就我所見,xsl:if語句的測試條件看起來很好,除了contains(@class,'heading-8 ')中的尾部空格外。沒有類別屬性包含字符串「標題-8」。在xsl:if和xsl:apply-templates元素中刪除空格可以解決問題。

+0

到底是我的問題,謝謝! – Kevin 2012-04-26 18:46:07

0

我想你可能會過於複雜的如果條件。看起來您正在檢查以下兄弟是否爲p標記,並且具有特定的屬性。因爲您已經在一個「heading-8」類的p元素上提示過,所以您可能不需要擔心generate-id(),並且可以將其簡化爲以下內容:

<xsl:if 
    test="following-sibling::*[1][self::x:p][contains(@class,'List-Bullet-CHAM1-CHAM-1')]">