1

我正在用 Java 创建一个 C++ 服务器和一个客户端。为了在它们之间交换数据结构,我计划使用 xerces-c 使用 XML,因为这在双方都可用。因为我对 XML 引擎只有非常基本的了解,所以我在谷歌上搜索我需要什么。

因此,当在任一端接收 XML 时,我会使用 SAX 解析器。但是,如果我理解这一点,那么我不能用它来将一个对象序列化为 XML,所以当我想发送数据时,我必须使用 DOM,对吧?

现在我至少对 SAX 和 DOM 之间的区别有了一些了解,所以我认为使用 SAX 更容易,但它不能用于创建 XML,只能用于读取它。

现在我的问题是,两者都使用是个好主意,还是在这种情况下我应该坚持使用 DOM?实际处理应该相当简单。当一个对象应该被传输时,它应该将它的数据复制到被传输的 XML 中。因此,除了反序列化时,我不需要进行查询。

4

1 回答 1

1

首先,您可能想看看Apache Swift,它是一个完美的框架,可以生成带有 Java 客户端的 C++ 服务器,以在这些语言之间交换数据结构。您可以在大约 2 小时内快速学习并自动生成客户端和服务器源代码。检查http://thrift.apache.org/上的示例

对你的问题。我认为您正确理解 DOM 和 SAX。

DOM:一次读取整个 XML 文档并将其放入一个对象(在 RAM 中)。这不适用于非常大的文档,这些文档不适合 RAM。

SAX:这会逐行读取 XML 文档和您开发的解析器,逐行决定要做什么。

如果您有一个现有对象,通常可以直接从中生成 XML。您可以使用简单 XML 框架 ( http://simple.sourceforge.net/ ) 来序列化和反序列化您的 Java 对象。

我认为您应该尽可能多地使用DOM策略进行读写,因为它更容易并且会给您带来更少的麻烦,因为您正在交换和序列化对象。仅当 RAM 中有非常大的文件(或同时有许多非常小的文件)时才使用 SAX。

于 2013-06-24T02:54:28.270 回答