gpt4 book ai didi

xml - Groovy XmlSlurper 与 XmlParser

转载 作者:数据小太阳 更新时间:2023-10-29 01:36:55 24 4
gpt4 key购买 nike

我在这个主题上搜索了一段时间,也找到了一些结果,我在文章末尾提到了这些结果。谁能帮我准确回答下面列出的这三个问题?

  1. 对于哪些用例,使用 XmlSluper 比 XmlParser 更有意义,反之亦然(从 API/语法的易用性角度来看)?

  2. 哪个内存效率更高? (看起来像 Slurper)

  3. 哪个处理 xml 的速度更快?

案例一。当我必须读取 xml 中的几乎所有节点时?

案例b。当我只需要读取几个节点时(比如使用 gpath 表达式)?

案例c。什么时候必须更新/转换 xml?

前提是 xml 文件不是普通文件(具有 xml 的深度和大小级别)。

资源:

http://www.tutkiun.com/2009/10/xmlparser-and-xmlslurper.html状态:

Difference between XMLParser and XMLSlurper:

There are similarities between XMLParser and XMLSlurper when used for simple reading but when we use them for advanced reading and when processing XML documents in other formats there are differences between two.

XMLParser stores intermediate results after parsing documents. But on the other hand,

XMLSlurper does not stores internal results after processing XML documents.

The real, fundamental differences become apparent when processing the parsed information. That is when processing with direct in-place data manipulation and processing in a streaming scenario.

http://groovy.dzone.com/news/john-wilson-groovy-and-xml

groovy 文档(XmlParserXmlSlurper)和 groovy 网站对它们进行了很好的解释(herehere),但在解释上述问题方面做得不是很好。

最佳答案

XmlSlurper 和 XmlParser 之间的最大区别在于 Parser 将创建类似于 DOM 的东西,而 Slurper 仅在真正需要时才尝试创建结构,因此使用延迟评估的路径。对于用户来说,两者看起来都非常平等。不同之处在于解析器结构只被评估一次,slurper 路径可以按需评估。按需在这里可以理解为“内存效率更高但速度更慢”。最终这取决于你做了多少路径/请求。例如,如果您只想知道 XML 的某个部分中的属性值然后完成它,XmlParser 仍然会处理所有内容并在准 DOM 上执行您的查询。在那里将创建大量对象,内存和 CPU 消耗。 XmlSlurper 不会创建对象,从而节省内存和 CPU。如果您无论如何都需要文档的所有部分,slurper 就会失去优势,因为它至少会创建与解析器一样多的对象。

两者都可以对文档进行转换,但 slurper 假定它是一个常量,因此您必须先写出更改并创建一个新的 slurper 来读取新的 xml。解析器支持立即查看更改.

所以问题 (1) 的答案(用例)是,如果您必须处理整个 XML,则使用解析器,如果只处理其中的一部分,则使用 slurper。 API 和语法在其中并没有真正发挥多大作用。 Groovy 人员试图让这两者在用户体验上非常相似。如果您想对 XML 进行增量更改,您也更喜欢解析器而不是 slurper。

上面的介绍也解释了什么是更有效的内存,问题 (2)。问题是,除非您无论如何都阅读了所有内容,否则解析器可能会这样做,但我没有实际数字说明差异有多大。

问题 (3) 也可以通过介绍来回答。如果你有多个惰性评估路径,你必须再次评估,那么这可能比你像在解析器中那样导航现有图形要慢。因此解析器可以更快,具体取决于您的使用情况。

所以我会说 (3a) 读取几乎所有节点本身并没有太大区别,因为请求是更具决定性的因素。但在情况 (3b) 中,如果你只需要读取几个节点,slurper 会更快,因为它不必在内存中创建一个完整的结构,这本身就已经花费了时间和内存。

至于 (3c)...现在两者都可以更新/转换 XML。哪个更快实际上更多地与您必须更改的 xml 的多少部分相关联。如果有很多部分我会说是解析器,如果不是,那么可能是 slurper。但是,例如,如果您想使用 slurper 将属性值从“Fred”更改为“John”,只是为了稍后使用相同的 slurper 查询此“John”,则它不会起作用。

关于xml - Groovy XmlSlurper 与 XmlParser,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7558019/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com