繁体   English   中英

哪个解析器:SAX,DOM或xpath?

[英]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文档,而不会遇到资源限制

萨克斯解析器将非常适合您的情况。我写了一篇有关萨克斯解析的博客文章

以及另一篇有关如何选择xml解析器的博客文章

希望这些对您有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM