2013-12-16 65 views
0

我在的XPath在Java中相當新的,我有以下的疑問與此相關的代碼,我發現到一個類上,我必須工作:究竟選擇這個XPath查詢是什麼?

public String getApplicationParameter(ApplicationParameter parameter) { 
    Element n; 
    XPath xPath; 

    try { 
     xPath = XPath.newInstance("//root/settings/" + parameter.toString().replace("_", "-")); 
     n = (Element) xPath.selectSingleNode(CONFIG_DOCUMENT); 
    } catch (JDOMException e) { 
     return ""; 
    } 

    if(n == null){ 
     return ""; 
    } 
    return n.getText(); 
    } 

當先前的ApplicationParameter輸入參數方法是這樣的枚舉是在同一個類中聲明:

public enum ApplicationParameter { 
    cache_size, 
    restub_days, 
    upload_processes, 
    download_processes, 
    upload_bandwidth, 
    download_bandwidth 
} 

而且CONFIG_DOCUMENTorg.jdom.Document中,其中包含以前的方法工作的XML。

所以我的疑問是:究竟選什麼XPath查詢

xPath = XPath.newInstance("//root/settings/" + parameter.toString().replace("_", "-")); 
n = (Element) xPath.selectSingleNode(CONFIG_DOCUMENT); 

TNX

安德烈

+1

代碼是否工作?例如,如果參數是cache_size,則字符串替換會將其更改爲「緩存大小」。 xPath然後指定元素內的元素,該元素位於元素內。用「//」表示「文檔的根元素」。 – splrs

+1

@splrs - // root實際上是指文檔中名爲「root」的任何元素,而不僅僅是文檔的根元素(這也需要稱爲「root」)。否則,您的評論就會出現。 – rolfl

+0

啊,你是對的。顯然我有點生疏! +1 – splrs

回答

5

鑑於這樣

<root> 
    <settings> 
    <cache-size id="THIS">120</cache-size> 
    <restub-days>6</restub-days> 
    </settings> 
</root> 

一個文件中的XPath表達式選擇我標有ID THIS的節點,因此整個方法返回120n.getText() )。作爲一個附註,最好使用Enum.name()而不是toString()來獲取常量的名稱,因爲可以覆蓋toString()以返回不同的文本。