2011-10-07 62 views
0

我需要搜索特定的xml節點。我知道它的名字的一部分,但不知道它的全名......我怎樣才能得到這個名稱的一部分?如何在java中搜索xml標籤名

我知道它可以用xpath解決,但我不知道如何。例如...:

<root> 
<head/> 
<body> <SuperAsdf> hi </SuperAsdf> 
</body> 
<root/> 

我知道必須與「超級」標籤,但我不知道,它可能有「ASDF」,所以我需要一個XPath表達式查找所有與標籤「超」。

此外,什麼函數在java中支持xpaths?

我正在使用getElementsByTagName,但我讀到它無法解釋xpath。

回答

2

正則表達式將是矯枉過正爲此目的。只需使用XPath表達式,如:

"//*[starts-with(local-name(), 'Super')]" 

關於XPath的Java函數...看到the code here例如,或者看看類XPathFactory。在你的類路徑,JAXP和XPathAPI類

List<Node> nodes = 
    XPathAPI.selectListOfNodes(doc, "//*[starts-with(local-name(), 'Super')]") 

如果你有一個XPath的2.0兼容的處理器(例如撒克遜):

0

XPath 1.0不支持正則表達式,但您仍然可以執行類似this的操作來實現您正在嘗試執行的操作(僅使用XPath函數)。

Xpath 2.0支持像matches()replace()(更多信息here)功能的正則表達式。

你的情況正則表達式將如下所示:

(Super).* 
0

您可以使用XPath表達式LarsH建議用XPathAPI libraryjavadoc)將選取它並使用它來選擇節點。

(免責聲明,我是XPathAPI庫的作者。)