【问题标题】:What exactly select this XPath query?究竟是什么选择了这个 XPath 查询?
【发布时间】:2014-01-03 22:33:48
【问题描述】:

我是 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输入参数是在同一个类中声明的这个enum

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

CONFIG_DOCUMENT 是一个 org.jdom.Document,其中包含上一个方法工作的 XML。

所以我的疑问是:究竟选择这个 XPath 查询 是什么?

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

Tnx

安德烈亚

【问题讨论】:

  • 代码有效吗?例如,如果参数是 cache_size,则字符串替换会将其更改为“cache-size”。然后,xPath 指定 元素内的元素 ,该元素位于 元素内。其中“//”表示“文档的根元素”。
  • @splrs - //root 实际上表示文档中称为“root”的任何元素,而不仅仅是文档的根元素(也需要称为“root”)。否则你的评论是正确的。
  • 啊,是的,你是对的。显然我有点生疏了! +1

标签: java xml xpath xml-parsing jdom


【解决方案1】:

给定这样的文件

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

XPath 表达式选择了我用 ID THIS 标记的节点,因此整个方法返回 120 (n.getText())。附带说明一下,最好使用 Enum.name() 而不是 toString() 来获取常量的名称,因为 toString() 可以被覆盖以返回不同的文本。

【讨论】:

    猜你喜欢
    • 2016-05-18
    • 2021-08-22
    • 1970-01-01
    • 2017-06-11
    • 1970-01-01
    • 2013-11-30
    • 2010-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多