XPath是一种比DOM和SAX更好的读取配置文件的方法吗?
如果是,
为什么log4j不使用XPathExpression读取配置文件?
如果否,
我应该选择哪种方法,以便在配置文件更改时不必修改代码?
更新 @kdgregory
通常,您知道在配置文件中寻找的参数(甚至是节点的完整路径)。在这种情况下为什么不使用XPathExpression?这是否会在每次进行后台解析时使处理速度变慢?
答案 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表达式在网页中选择元素。