【发布时间】:2010-03-06 07:22:48
【问题描述】:
我确信这应该很明显,但我可以找到关于我的问题的任何参考资料。 Scala XML 使用什么底层技术?它是类似 DOM 还是类似 SAX 或类似 StAX 的东西?处理大型文档时应该注意哪些性能损失? StAX 是否仍然更高效?
提前致谢。
【问题讨论】:
我确信这应该很明显,但我可以找到关于我的问题的任何参考资料。 Scala XML 使用什么底层技术?它是类似 DOM 还是类似 SAX 或类似 StAX 的东西?处理大型文档时应该注意哪些性能损失? StAX 是否仍然更高效?
提前致谢。
【问题讨论】:
可以使用scala.xml.pull.XMLEventReader 处理大型文档(数百 MB)。请参阅nightly scaladoc(假设您将使用 2.8)。这是使用像 StAX 这样的拉解析器模型。
一般而言,与 Java 相比,Scala 在处理 XML 时各司其职。 XML 是不可变的。您还可以在 Scala 代码中直接使用 XML 文字,这会使代码更具可读性。
针对评论,XML.load 使用 javax.xml.parsers.{ SAXParser, SAXParserFactory } 作为底层技术。我还假设生成的 xml 已加载到内存中。
【讨论】:
XML.load() 方法,以及相应的NodeSeq 东西)——我想如果我使用这个API,整个文档都会被加载和解析?跨度>
Scala 做自己的事情。大多数 XML 模型都是可变的,并且不能很好地转化为不变性(因为它们主要跟踪父级)。
Here's 一篇关于它的论文。
【讨论】: