0

我有运行查询的 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>
4

6 回答 6

5

它主要取决于用例。

如果一般来说,SAX Parser对于解析大文件和dom parser备用文件很有用。

原因是dom parser在解析大文件/输入流时占用了足够的内存。

在我看来,需要有一定的经验才能最好地利用 Sax Parser。相对 dom 解析更容易学习和使用。

或者,如果用例允许,与 sax 相比更容易并在内部使用 sax,Apaches commons-digester可以作为替代建议。

并且xpath不是解析器。


对于您的情况,您不需要解析器。我认为您正在寻找 xpath 来使用xpath.

如果您需要为您的简单生成一个新的 xml,您xml可以手动执行此操作。我现在不能提出任何更好的选择。

于 2012-08-01T13:26:12.753 回答
3

如果您真的将 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);

以上内容未经测试,但它应该给你一个想法。

于 2013-04-22T16:58:02.943 回答
3

在可用性和程序员生产力方面更好:SAX 最差,XPath 最好。

在节省机器周期方面更好:SAX 最好,XPath 最差。

所以这取决于你的程序员是否比你的电脑贵。通常他们会这样做。

于 2012-08-01T16:07:51.887 回答
2

从技术上讲,XPath 不是一种查询,而是一种用于从 XML 文档中选择节点的查询语言

SaX 和 DOM 之间的主要区别在于 DOM 会将您的所有文档加载到内存结构中。对于小型 XML 文档,您不会遇到太多麻烦,但对于大型 XML 文档,内存使用可能会成为问题。另一方面,SaX 将以流方式处理您的 XML 文档,因此最终没有代表整个文档的对象模型。相反,您需要自己跟踪在文档中遇到的数据。

对于这种情况,我的选择是使用 SaX 并跟踪文档中的所有查询,例如在 a 中Map<String, String>(其中键是查询 ID,值是查询本身)。

于 2012-08-01T13:24:39.763 回答
1

DOM 规范定义了一种基于树的方法来导航 XML 文档 SAX 规范定义了一种基于事件的方法,解析器通过这种方法扫描 XML 数据,每当文档的某些部分调用处理函数 SAX 规范的优势在于它可以扫描并在不达到资源限制的情况下解析千兆字节的 XML 文档

于 2012-08-01T13:39:51.340 回答
0

Sax 解析器将非常适合您的情况。我写了一篇关于Sax 解析的博客文章

和另一篇关于如何选择 xml 解析器的博文

希望这些对您有所帮助。

于 2013-04-22T16:30:31.843 回答