在没有架构限制的情况下解析XML数据的最快且最有效的方法

时间:2017-05-25 07:26:46

标签: xml xpath jaxb xstream jxpath

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

  1. 为XML记录创建DOM对象。
  2. 在DOM对象上应用XPath查询以检索字段。
  3. 我的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: 检索元素的子元素列表应该返回以下输出

    子元素 - {&#39; A&#39;,&#39; B&#39;&#39;&#39;&#39; D&#39;,&#39; E&# 39;} - XML中的第3个节点包含空/ null,应该创建为空节点。但目前我的输出结果为{&#39; A&#39; B&#39;&#39; D&#39; E&#39; E&#39;}未创建第3个值。

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

    有没有什么方法可以使用DOM本身以高效和快速的方式实现这一目标?

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

    这样做的最好方法是什么?

    提前致谢。

1 个答案:

答案 0 :(得分:0)

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

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

在场景#2中,如果编写XPath来表达您的复杂条件是非常繁琐的,那么导航以使用低级DOM导航查找相同的数据将会变得无比繁琐。但是,你似乎对你的目标感到困惑。你的头衔表明你想要快速高效地工作,但现在突然你的目标是减少和繁琐#34;。你需要让自己的想法得到实现。