2011-09-12 37 views
0

我有一個XSLT聲明如下:<address1/>什麼樣的價值是在地址

<xsl:when test="address1 != ' '"> 

我進來的XML地址節點如下:

<address1/> 

節點存在和XSL聲明似乎有時工作,但它並不總是工作,它給我不一致的結果。我正在檢查address1節點,如果它是空格,那麼我檢查address2節點,如果它不是空格,我將它移動到address1輸出字段,如果address1輸入是空格。我們的客戶在輸入地址時非常不一致,我們的供應商要求address1有效。謝謝你的幫助。

+0

好問題,+1,因爲你會學習使用標準XPath函數'normalize-space()'。 –

回答

0

該節點爲空。

您正在測試它不是單個空間' ',如果它是一個空節點,則測試將成功。

爲了測試該節點是空的,你可以這樣做:

<xsl:when test="address1 = ''"> 
+0

你如何檢查一個空節點 –

+0

@丹尼斯 - 答案更新。 – Oded

0

的自閉標籤不應該有內容,所以檢查''將要走的正確方法。做'[space]'意味着標籤實際上是<address1>[space]</address1>,它不再是自動關閉。

+0

我試圖欺騙它爲'',它仍然無法正常工作 –

2

檢查字符串的問題是您實際檢查元素的所有後代中的文本,因此<foo><bar>test</bar></foo>將因測試foo = ''失敗,因爲文本test存在於樹內。

更確鑿的測試是: address1[not(text()) and not(*)]

這僅通過其中存在的地址元素中既不文本也不子元素。

0

你沒有告訴我們足夠的關於你的代碼,我們可以可靠地告訴你它有什麼問題。別那麼沉默!可能存在各種各樣的問題,這些問題在一小段片斷中並不明顯。使用錯誤的上下文項目。

一條建議,儘管:避免「!=」運算符(它出現在你的例子中)。通常你需要not(author='')而不是author!=''。如果只有一個author元素,它們的意思是一樣的,但如果沒有author元素或者多於一個,則它們具有不同的含義。如果至少有一個author值不是空字符串,則表達式author!=''爲true;如果沒有其值爲空字符串的作者元素,則表達式not(author='')爲真。

0

要檢查是否一個元素的字符串值非空和非空白只使用

string-length(normalize-space(address1)) > 0 

標準XPath函數normalize-space($s)採用字符串$s作爲參數並返回另一個串從$s產生,其中刪除所有前導空白字符和尾隨空白字符,並將任何一組相鄰臨時空白字符替換爲單個空格字符。

這意味着當應用於僅包含空格字符的字符串時,normalize-space()的結果爲空字符串(具有string-length()0)。

XPath表達式以上正在測試如果施加normalize-space()函數的address1字符串值的結果具有正(> 0)長度 - 這意味着address1字符串值包含至少一個非空白字符。