是一种比DOM和SAX?更好的读取配置文件的方法。
如果是,
为什么log4j不使用XPathExpression来读取配置文件?
如果不是,
如果配置文件更改,我应该选择什么方法,这样就不必修改代码了?
更新: @kdgregory
通常,您知道在配置文件(甚至节点的完整路径)中要查找的参数。为什么不在这种情况下使用XPathExpression呢?这是否会使处理速度慢,因为每次后台解析都会发生?
发布于 2009-12-26 15:14:57
为什么log4j不使用XPathExpression来读取配置文件?
部分原因是XPath直到1.5才成为JDK的一部分,而Log4J的XML配置早于该版本。
但是可能更多的是因为Log4J配置文件是一个简单的层次结构,并且很容易遍历这样的结构并设置配置选项。如果您查看org.apache.log4j.xml.DOMConfigurator的源代码,您将看到一个非常短的调度循环,它查看元素名称,将其传递给特定于对象的解析器。
XPath是比DOM和SAX更好的读取配置文件的方法吗?
XPath不是DOM和SAX的替代品,而是它们之上的一个附加层。是的,您可以将任何InputSource传递给XPathExpression,也可以从任何InputStream创建InputSource,但是解析会在幕后进行。如果您必须在同一个文件上执行多个XPath表达式,那么将其解析为DOM非常有意义。
如果配置文件更改,我应该选择什么方法,这样就不必修改代码了?
配置文件通常会更改,因为代码会改变,而不是相反:添加要配置的特性,然后编写代码来配置它。
那么,何时应该使用XPath呢?哪里有更多的优势?
XPath的一个很好的用途是,当您需要从文件中提取特定的片段时,特别是当您提取它们的顺序与文件的文档顺序不相对应的时候。
最后:我强烈建议使用阿帕奇消化池或许多Java->XML序列化库中的任何一个,而不是使用显式XPath。
发布于 2009-12-27 06:23:11
当我只想从一个复杂的文档中获取一些信息,并且不想麻烦地处理整个结构时,我发现XPath很有用。例如,在使用selenium测试框架时,可以使用XPath表达式在网页中选择元素。
https://stackoverflow.com/questions/1963562
复制相似问题