XPath是一种比使用SAX / DOM解析器更好的读取配置文件的方法吗?

时间:2009-12-26 15:03:23

标签: java xml

XPath是一种比DOM和SAX更好的读取配置文件的方法吗?

如果是,

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

如果否,

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

更新 @kdgregory

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

2 个答案:

答案 0 :(得分:3)

  

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

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

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

  

XPath是一种比DOM和SAX更好的读取配置文件的方法吗?

XPath不是DOM和SAX的替代品,它是一个额外的层。是的,您可以将InputSource传递给XPathExpression,然后您可以从任何InputSource创建InputStream,但之后会在后台进行解析。如果你必须在同一个文件上执行多个XPath表达式,那么将它解析成一个DOM是很有意义的。

  

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

配置文件通常会因代码更改而更改,而不是相反:添加要配置的功能,然后编写代码进行配置。

  

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

XPath的一个好用途是当您需要从文件中提取特定部分时,特别是如果您提取它们的顺序与文件的文档顺序不对应。


最后:我强烈建议使用Apache Digester或任何Java-> XML序列化库,而不是显式XPath。

答案 1 :(得分:0)

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