读取XML作为字符串vs读取XML作为DOM中的DOM

时间:2017-05-15 11:28:33

标签: java xml string dom

我是java的新手,想知道哪种读取XML的方法更好。将XML读取为字符串并将XML读取为DOM(或任何其他方法)。只是想知道将XML作为字符串读取是否优于DOM,或者是否有效地读取XML。

2 个答案:

答案 0 :(得分:0)

  • 当您将其作为DOM红色时,特殊字符将转换回原始形式。 像<转换为<
    还有其他人喜欢&lt; (<), &amp; (&), &gt; (>), &quot; ("), and &apos; (')
  • 在DOM
  • 中处理XML内部的数据很容易
  • 当您读取为DOM时自动验证(即如果您的XML无效,则无法在DOM中进行转换)

答案 1 :(得分:0)

如果您不需要任何内容​​处理,只需将XML文件作为字符串读取即可。例如。当Web服务器将XML文件原样发送给客户端时。在这种情况下,解析XML会产生反作用。

但在所有其他情况下,应该解析XML。通过正则表达式操作XML字符串尤其不是一个好主意。

从解析中获得的最基本的东西是良好形成的确定性。解析过程仅适用于真实的XML文档。

良好的形成意味着:

  • 只有一个根节点。
  • 始终匹配开始和结束元素。
  • 文字中没有使用<>&等特殊字符。必须相应地进行转义。
  • 文本中的字符(文本节点和属性)已正确编码(根据声明的编码或unicode实体)。

此外,您可以针对DTD或XSD架构验证 XML文档。所以你可以确定文档结构。

如果你有一个解析过的DOM文档,你可以

  • 访问和操作节点
  • 使用XPath查询某些节点
  • 通过XSLT转换文档
  • 通过XQuery查询(使用像Saxon这样的第三方库)
  • 通过JAXB
  • 解组到Java对象

但这仅适用于中小型文档,因为整个文档树必须完全保存在内存中。

除了DOM之外,还有其他技术可以处理大型XML文档,而无需将文档保存在内存中:

  • SAX:使用回调处理XML的低级API。您实现了一个处理程序类,解析器为每个打开的标记,关闭标记,文本节点等调用处理程序方法。
  • StAX:更现代的pull API(低级事件API和更高级别的流API),包括一个简单易用的写API。