2017-05-15 62 views
-1

我是新来的java,想知道哪种方法读取XML更好。将XML读取为字符串并将XML读取为DOM(或任何其他方法)。只是好奇地想知道,如果将XML读为字符串比DOM更好,或者以任何方式有效地读取XML。阅读XML作为字符串与读取XML作为DOM中的Java

+1

作为一般的观点,没有人可以说,不知道(a)你想要达到的目标和(b)你如何衡量善良(性能?代码行?可维护性?) 。在这种特殊情况下,甚至不清楚“将XML读作字符串”的含义。 –

回答

0

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

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

您从解析中得到的最基本的东西是确定性良好形成性。解析过程只能完成真正的XML文档。

好构性是指:

  • 只有一个根节点。
  • 始终匹配开始和结束元素。
  • 没有特殊字符,如<,>&用于文本。必须相应地逃脱。
  • 文本中的字符(文本节点和属性)被正确编码(根据声明的编码或作为unicode实体)。

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

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

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

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

    除了DOM还有其他的技术来处理大型XML文档,而不需要保存文档存储:

    • SAX:低层次的API来处理与回调XML。您实现了一个处理程序类,解析器为每个打开的标记,关闭标记,文本节点等调用您的处理程序方法。
    • StAX:更现代的拉API(包括简单易用的低级事件API和更高级别的流API)编写API。
  • 0
    • 特殊字符会转换回原始形式,而您将其作为DOM进行红色处理。 像&lt;转换为<
      和其他类似&lt; (<), &amp; (&), &gt; (>), &quot; ("), and &apos; (')
    • 这是很容易,当你阅读的DOM(即可以在DOM不能转换,如果你的XML是无效的自动处理在DOM
    • 验证中的XML数据)