Groovy XmlSlurper与XmlParser的比较

mspsb9vt  于 2022-11-01  发布在  其他
关注(0)|答案(2)|浏览(390)

我在这个主题上搜索了一段时间,也找到了一些结果,我在帖子的最后提到。有人能帮助我准确地回答下面列出的三个问题吗?
1.对于哪些用例,使用XmlSluper比使用XmlParser更有意义,反之亦然(从API/语法的易用性Angular 来看)?
1.哪一个内存效率更高?(看起来像Slurper)
1.哪一个处理XML更快?
例a.当我必须读取xml中的几乎所有节点时?
例B.当我必须只读取几个节点时(就像使用gpath表达式一样)?
例c.当我必须更新/转换xml时?
只要XML文档不是平凡的(具有XML的深度和大小的级别)。

资源

http://www.tutkiun.com/2009/10/xmlparser-and-xmlslurper.html声明:
XMLParser和XMLSlurper之间的区别:
XMLParser和XMLSlurper在用于简单阅读时有相似之处,但当我们将它们用于高级读取以及处理其他格式的XML文档时,两者之间存在差异。
XMLParser在解析文档之后存储中间结果,
XMLSlurper在处理XML文档后不存储内部结果。
当处理解析的信息时,真实的的、根本的区别就变得明显了,也就是说,当处理直接的就地数据操作和在流场景中处理时。
http://groovy.dzone.com/news/john-wilson-groovy-and-xml
groovy文档(XmlParserXmlSlurper)和groovy站点(herehere)很好地解释了它们,但是在解释上述问题方面做得不好。

vhipe2zx

vhipe2zx1#

XmlSlurper和XmlParser之间的最大区别是Parser将创建类似于DOM的东西,而Slurper只在真正需要时才尝试创建结构,因此使用路径,而路径是延迟计算的。对于用户来说,两者看起来非常相似。区别更大的是解析器结构只计算一次,可以根据需要来评估吸收器路径。2根据需要可以被理解为“更有效的内存但是更慢”。3最终它取决于你需要多少路径/请求。例如,如果您只想知道XML某个部分中的属性值,然后就完成了它,XmlParser仍然会处理所有内容,并在准DOM上执行查询,因为这样会创建很多对象,XmlSlurper不会创建对象,因此保存了内存和CPU。如果您无论如何都需要文档的所有部分,那么slurper就失去了优势,因为它创建的对象至少与解析器创建的对象一样多。
两者都可以对文档进行转换,但是slurper假设它是一个常量,因此您必须首先写出更改,然后创建一个新的slurper来读取新的xml。解析器支持立即查看更改。
所以问题(1)的答案,用例,是,如果你必须处理整个XML,你就使用解析器,如果只是部分XML,你就使用slurper。API和语法在这方面并没有太大的作用。Groovy的人试图让这两者在用户体验上非常相似。而且,如果你想对XML进行增量更改,你会更喜欢解析器而不是slurper。
上面的介绍也解释了什么是更有效的内存,问题(2)。slurper是,除非你无论如何都要读入,否则解析器可能会,但我没有关于差异有多大的实际数字。
问题(3)也可以通过介绍来回答。如果你有多个惰性求值路径,你必须再次求值,那么这可能比你在解析器中导航现有的图要慢。所以解析器可以更快,这取决于你的使用。
所以我会说(3a)阅读几乎所有的节点本身没有太大的区别,因为请求才是更重要的决定因素。但是在(3b)的情况下,我会说如果你只需要读取几个节点,slurper会更快,因为它不需要在内存中创建一个完整的结构,这本身就需要花费时间和内存。
至于(3c)......现在两者都可以更新/转换XML。哪一个更快实际上更多地与你必须更改XML的多少部分有关。如果有很多部分,我会说是解析器,如果没有,那么可能是slurper。但是,如果你想用slurper将属性值从“Fred”更改为“John”,只是为了以后使用同一个slurper查询这个“John”,那是行不通的。

vlf7wbxs

vlf7wbxs2#

我会给予你干脆的答案:

  • XML解析器比XML Slurper更快。
  • XMLSlurper比XMLParser消耗的内存少。
  • XML解析器可以同时解析和更新XML。
  • 对于XMLSlurper,您需要在每次更新之后MarkupBuild XML。
  • 当你想使用路径表达式时,XMLSlurper会比parser更好。
  • 对于阅读几乎所有节点,XML解析器就可以了。

希望能有所帮助

相关问题