0

目前我正在处理 XML 数据(以 MB 为单位),如下所示,

  1. 为 XML 记录创建 DOM 对象。
  2. 对 DOM 对象应用 XPath 查询以检索字段。

我的XML如下,

<root>
  <element>
    <sub-element>A</sub-element>
    <sub-element>B</sub-element>
    </sub-element>
    <sub-element>D</sub-element>
    <sub-element>E</sub-element>
  </element>
</root>

场景#1:检索一个元素的子元素列表,期望返回以下输出

子元素 - {'A','B','','D','E'} - XML 中的第三个节点包含空/null,应创建为空节点。但目前我得到的输出是 {'A','B','D','E'} 没有创建第三个值。

场景 #2:我们的应用程序中使用了一些复杂的查询,这些查询在 XPATH 中从 XML DOM 对象中检索字段是很乏味的(比如参数化的 XPATH)

有什么方法可以让我们以高效和最快的方式使用 DOM 本身来实现这一点?

或者

我们是否需要从 XML(通过 XStream)创建一个对象图并通过处理 POJO 对象的普通 java 方式来处理查询?

或者

有什么最好的方法吗?

提前致谢。

4

1 回答 1

0

好吧,几乎任何其他树模型都会比 DOM 更好。您似乎提议删除解决方案的 XPath 部分,但删除 DOM 部分会好得多。例如,Saxon 的 XPath 引擎在本地 Saxon 树上运行时比在 DOM 上运行时快 5-10 倍。(DOM 在搜索方面确实效率低下,主要是因为它处理名称空间的笨拙方式)。

但是你的问题很混乱。您的 XML 示例格式不正确:我怀疑您已经按照</sub-element>您的意思写了<sub-element/>. 如果您的 XPath 正在检索该空元素并且您不想要它,那么您只需要更正您的 XPath。

在场景 #2 中,如果编写 XPath 来表达您的复杂条件是“乏味的”,那么使用低级 DOM 导航来查找相同的数据将变得更加乏味。但是,您似乎对自己的目标感到困惑。你的标题说你想要“快速高效”,但现在突然间你的目标是不那么“乏味”。您需要下定决心要实现的目标。

于 2017-05-25T11:54:52.633 回答