2012-02-07 107 views
2

我試圖計算文檔有多少某些元素有:JDOM XML過濾

Iterator<?> processDescendants = doc.getDescendants(new ElementFilter("a")); 

while(processDescendants.hasNext()) { 
    numPending++; 
} 

processDescendants = doc.getDescendants(new ElementFilter("b")); 

while(processDescendants.hasNext()) { 
    numPending++; 
} 

必須有一個更簡單的方法...如:

processDescendants = doc.getDescendants(new ElementFilter("a|b")); // something like Regex maybe? 

任何人都可以幫助?謝謝。

回答

6

基本上有兩種方法可以做到這一點。最簡單的辦法是自己找上門的元素...

Iterator<?> processDescendants = doc.getDescendants(new ElementFilter()); 

while(processDescendants.hasNext()) { 
    Element e = processDescendants.Next(); 
    string currentName = e.getTagName(); 
    if(currentName.equals("a") || currentName.equals("b")) 
    { 
     numPending++; 
    } 
} 

或者您也可以實現自己的過濾器添加的功能

import org.jdom.filter.Filter; 
import org.jdom.Element; 

public class ElementRegexFilter implements Filter { 

    private String regex = ""; 

    public ElementRegexFilter(String regex) 
    { 
     this.regex = regex; 
    } 

    public boolean matches(Object o) 
    { 
     if(o instanceof Element) 
     { 
      String ElementName = ((Element) o).getName(); 
      return ElementName.matches(regex); 
     } 
     return false; 
    } 

} 
+0

完成自定義過濾器後。我們如何使用它。匹配方法會自動調用? – 2016-01-17 12:56:42

1

我覺得沒有,但是您可以爲JDOM解析器實現自己的 Filter,類似MatchABElementFilter,並且使match()方法對名稱爲「a」的type元素的對象返回「true」或「b」

1

有一個聲明的方式做你想做的。 XPath表達式爲//a | //b

JDOM包含a utility class for making XPath queries,您將得到一個匹配節點列表,並且可以在列表中調用size來計算。