2012-08-30 103 views
3

如何檢查XML節點是包含文本還是僅包含空節點?如何檢查XML節點是否包含文本

例子:比方說,我們有以下XML:

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

(注意p標籤之間的空格)

在不同的XML,我們有以下的XML:

<text> 
    <p>Hello World!</p> 
</text> 

我想測試通過第二個例子,但不是在第一個,因爲第二個例子包含文本,但第一個包含空的節點。

有沒有一種方法可以輕鬆實現?

(我使用XSLT 2.0。)

回答

1

如果你把

<xsl:strip-space elements="*"/> 

在你的樣式表分析器將忽略你的輸入文檔中完全由空白的文本節點的頂部。除此之外,這意味着您的示例p帶空格的元素將被視爲完全空白。例如,匹配text[p/text()]的模板將與您的第二個示例中的text元素匹配,但不匹配p子元素全部爲空(或僅包含空格)的元素。

5

我想normalize-space你想要做什麼,例如這將「通行證」:

<xsl:if test="normalize-space(/text/p) != ''"> 
    ... 
</xsl:if> 

normalize-space將削減所有的前導和字符串,它會在你的第二個例子身後留下的文字,但刪除所有的字符在你的第一個例子讓您比較空的尾隨空白字符串''

注意它也會將多個空白字符按順序壓縮爲單個字符,因此例如hello<space><space><space>there將變爲hello<space>there

http://www.w3.org/TR/xpath/#function-normalize-space(XPath的1)

7

使用

p[normalize-space()] 

這將選擇任何兒童p上下文(當前)節點,其字符串值不是空串或僅空格字符串。

相關問題