代码之家  ›  专栏  ›  技术社区  ›  freddoo

与使用SAX/DOM解析器相比,xpath是读取配置文件的更好方法吗?

  •  2
  • freddoo  · 技术社区  · 6 年前

    xpath是否比dom和sax更好地读取配置文件?

    如果是的话,

    为什么log4j不使用xpathexpression读取配置文件?

    如果没有,

    我应该选择什么方法,以便在配置文件更改时不必修改代码?

    更新: @格列高利

    通常,您知道在配置文件中要查找的参数(甚至是节点的完整路径)。为什么不在这种情况下使用xpathexpression?这是否会使处理速度和每次进行后台分析时一样慢?

    2 回复  |  直到 15 年前
        1
  •  3
  •   Mihai A    15 年前

    为什么log4j不使用xpathexpression读取配置文件?

    部分原因是,直到1.5,xpath才成为JDK的一部分,而log4j的XML配置早于该版本。

    但可能更多的原因是log4j配置文件是一个简单的层次结构,并且很容易遍历这样的结构并设置配置选项。如果您查看的源代码 org.apache.log4j.xml.DOMConfigurator 您将看到一个非常短的分派循环,它查看元素名,并将其传递给特定于对象的解析器。

    xpath是否比dom和sax更好地读取配置文件?

    xpath不是DOM和SAX的替代品,而是它们上面的一个附加层。是的,你可以通过任何 InputSource XPathExpression ,您可以创建一个 输入源 从任何 InputStream ,但解析是在幕后进行的。如果必须在同一个文件上执行多个XPath表达式,那么将其解析为一个DOM就非常有意义。

    我应该选择什么方法,以便在配置文件更改时不必修改代码?

    配置文件通常会因为代码更改而更改,而不是反过来:您添加了一个要配置的功能,然后编写代码来配置它。

    那么,什么时候应该使用xpath?哪里有更大的优势?

    xpath的一个好用法是,当需要从文件中提取特定片段时,尤其是当提取片段的顺序与文件的文档顺序不一致时。


    最后:我强烈建议使用 Apache Digester 或Java或GT系列XML序列化库中的任何一个,而不是显式XPath。

        2
  •  0
  •   Peter Recore    15 年前

    当我只想从一个复杂的文档中获取一些信息,并且不想费心处理整个结构时,我发现xpath非常有用。例如,在使用Selenium测试框架时,可以使用XPath表达式选择网页中的元素。