2010-10-04 25 views
0

我有一個這樣的XML Schema元素:dom4j中XPath的區分null或空字符串

<xs:element type="xs:string" name="IsActive" minOccurs="0"> </xs:element> 

我使用dom4j中XPath來計算元素。

似乎無法確定元素是否存在於XML文檔中,或者其值僅爲""

我想<IsActive>是任一,1)"" 2)"anyvalue1" 3)"anyvalue"

此外,我想知道如果<IsActive>存在。

XPath valuePath; 
Node obj = (Node)valuePath.selectSingleNode(requestElement); 

obj.getText()總是返回"",即使<IsActive>不存在。

valuePath.valueOf(requestElement); // does the same 

所以我的問題是:如何區分空字符串和空字符串?

回答

2

如何:

List nodeList = valuePath.selectNodes(requestElement); 
if (nodeList.isEmpty()) ... 

更新: @Alejandro指出,這將是有益的補充解釋。

顯然,selectSingleNode()不返回null或提供任何其他方式來區分導致空節點集的XPath表達式和上下文,以及產生一個或多個節點的XPath表達式和上下文。所以這不符合目前的需要。

但是,selectNodes()返回與給定上下文中的XPath表達式匹配的節點的List。所以大概我們可以使用List.isEmpty()方法(或size()方法)來發現XPath是否匹配零節點或非零。

如果一個節點匹配,以獲得(第一)匹配的節點,我們可以使用nodeList.get(0)

List nodeList = valuePath.selectNodes(requestElement); 
if (!nodeList.isEmpty()) 
    doSomethingWith(nodeList.get(0)); 

我沒有測試過這一點,但它應該在你的目標範圍得到你。

+0

這是正確的,但缺少XPath和Dom4j解釋:OP需要測試空節點集合;看起來像'selectNodes'方法沒有'null'結果,Dom4j中'Node'類沒有空節點測試; List類有一個'isEmpty'方法。此外,類節點鑄造是不需要的(也許是錯誤的,我沒有測試) – 2010-10-04 16:56:09

+0

@Alejandro,哎呀,你是對的演員......這是錯的。修正了它 - 謝謝。 – LarsH 2010-10-04 17:57:04