2011-10-14 53 views
2

我有以下兩個XML節點:試驗節點空虛

<CELL ROWSPAN="1" COLSPAN="3"> 
    <TableBodyCenterBold> 
    <A ID="pgfId-179932"/> 
    </TableBodyCenterBold> 
</CELL> 

<CELL ROWSPAN="1" COLSPAN="6"> 
    <TableBodyCenterBold> 
    <A ID="pgfId-179938"/> 
    Body Tensile Capacity (lb) 
    </TableBodyCenterBold> 
</CELL> 

顯然,第一節點從<CELL>在所述第一個的所述<TableBodyCenterBold>第二<CELL>不同沒有任何文字。

我曾嘗試下面的XPath,但都失敗了:

<xsl:when test="string-length(CELL[1]/TableBodyCenterBold[1]/text()) &gt; 0"> 

<xsl:when test="CELL[1]/TableBodyCenterBold[1]/text()!=''"> 

能否專家就如何有效地區別於第二第一節一些幫助?

回答

2

您必須考慮到TableBodyCenterBold現有僅限空白的文本節點子項

裏面測試「emptyness」而忽略空格只有文本節點正確的表達是

CELL[1]/TableBodyCenterBold[1][not(string-length(normalize-space()) > 0)] 

該評估爲true()什麼時候第一個TableBodyCenterBold童第CELL孩子當前節點的,具有一個字符串值,在標準化時會產生空字符串。

+0

非常感謝你!只有你提供了很好的解決方案,並且看到了問題的本質! – Kevin

+0

@Kevin:不客氣。 –

1

嘗試

CELL[1]/TableBodyCenterBold[1]/A[not(text())] 

CELL[1]/TableBodyCenterBold/A[not(node())] 
+0

@karkover,既沒有工作:( – Kevin

+0

@凱文 - 你是否使用匹配或測試? – krakover

1

Krakover的答案是正確的想法,但我相信他錯誤地包括了A節點測試步驟。我相信你是不是在尋找:

CELL[1]/TableBodyCenterBold[not(text())] 

文本在您的例子是TableBodyCenterBold元素中,而不是A元素。另外,由於這是一個相對XPath(它不以/開頭),因此您可以仔細檢查此XPath是否正在針對您期望的上下文節點進行評估。