[英]Which parser: SAX, DOM or xpath?
我有如下所述运行查询的xml。 哪个解析器(sax或DOM或xpath)最适合按ID检索查询节点?
您能用一些示例代码向我解释一下,这样对我有很大帮助吗?
我想编写一个通用类,该类通过id读取查询并将参数传递给它。 执行查询后返回值的最佳方法是什么,因为每个查询都可能返回不同的值集?
<?xml version="1.0" encoding="UTF-8"?>
<queries>
<query id="getUserByName">
select * from users where name=?
</query>
<query id="getUserByEmail">
select * from users where email=?
</query>
</queries>
它主要取决于用例。
一般而言, SAX Parser
非常适合解析大文件,而dom parser
可以替代。
原因是dom parser
最终在解析大型文件/输入流时占用了足够的内存。
我认为,它需要具有一定程度的经验才能最好地利用Sax Parser。 相对而言,dom解析更易于学习和使用。
或者,如果用例允许,则与Apache Sax相比更容易并且在内部使用Sax,Apaches commons-digester可以作为替代建议。
而且xpath
不是解析器。
对于您的情况,您不需要解析器。 我认为您正在寻找xpath来使用xpath
检索SQL查询。
如果您需要为简单的xml
生成一个新的xml,则可以手动执行。 我现在不能建议任何更好的选择。
从可用性和程序员生产力的角度出发,更好:SAX最差,XPath最好。
在节省机器周期方面更好:SAX是最好的,XPath是最差的。
因此,这取决于您的程序员是否比计算机贵。 通常他们会。
如果您真的将SQL转换为XML,然后执行,那么我将使用MyBatis。
如果您不想使用MyBatis,则应该使用JAXB并将整个XML加载为查询对象列表,因为您不想为每个查询重新解析XML。 让我告诉您使用JAXB有多么容易:
@XmlRootElement(name = "queries")
public class Queries {
@XmlElement(name = "query")
public List<Query> queries;
}
public Query {
@XmlAttribute
public String id;
@XmlValue
public String sql;
}
Queries queries = JAXB.unmarshal(file, Queries.class);
上面没有经过测试,但是应该可以给您一个想法。
从技术上讲,XPath不是查询,而是用于从XML文档中选择节点的查询语言 。
SaX和DOM之间的主要区别在于DOM会将您的所有文档加载到内存结构中。 对于小型XML文档,您不会遇到很多麻烦,但是对于大型XML文档,内存使用可能会成为问题。 另一方面,SaX将以流方式处理XML文档,因此最终没有对象模型代表整个文档。 相反,您将需要自己跟踪文档中遇到的数据。
对于这种情况,我的选择是使用SaX并跟踪文档中的所有查询,例如在Map<String, String>
(其中键是查询ID,值是查询本身)。
DOM规范定义了一种用于浏览XML文档的基于树的方法SAX规范定义了一种基于事件的方法,通过该方法,解析器可以扫描XML数据,并在文档的某些部分时调用处理程序函数。SAX规范的优势在于它可以扫描并解析数GB的XML文档,而不会遇到资源限制
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.