- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我在这个主题上搜索了一段时间,也找到了一些结果,我在文章末尾提到了这些结果。谁能帮我准确回答下面列出的这三个问题?
对于哪些用例,使用 XmlSluper 比 XmlParser 更有意义,反之亦然(从 API/语法的易用性角度来看)?
哪个内存效率更高? (看起来像 Slurper)
哪个处理 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 文档(XmlParser、XmlSlurper)和 groovy 网站对它们进行了很好的解释(here 和 here),但在解释上述问题方面做得不是很好。
最佳答案
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/
我在从以下 XML 解析属性值时遇到问题: s=''' ''' def contextroot def xml = new XmlParser(false,fa
我在从以下 XML 解析属性值时遇到问题: s=''' ''' def contextroot def xml = new XmlParser(false,fa
我想解析一个看起来像这样的 XML 标记: 我目前正在使用 BlockRSSParser 来做这件事。 我试过用下面的方法来做: - (void)parser:(NSXMLParser *)pars
这个问题在这里已经有了答案: how to parse the local XML correctly? (1 个回答) 关闭 3 年前。 我试图用 let contentString = "abc
我正在使用 Swift 编写一个 RSS 阅读器应用程序。我使用内置类 XMLParser做解析工作。 XMLParser当遇到一些奇怪的标签时会停止,例如 (此标签与结束标签 匹配)。错误代码为
我正在解析的 wiki 页面丢失了大量空白,我认为这是解析器的问题。我的 Groovy 脚本中有这个: @Grab(group='org.ccil.cowan.tagsoup', module='ta
我已经遵循了多个关于如何为 Android 平台设置 SAX XML 解析器的在线教程,但它们似乎都不起作用!有什么问题?这是我的代码: 进口: import java.net.URL; import
所以我有一个 XML 文件,我使用 NSXMLParser 处理它。所需的元素是 我需要检索我试过的 url: -(void)parser:(NSXMLParser *)parser didStar
我正在创建一个需要读取 XML file 的 iPhone 应用程序 属性 @property (nonatomic, strong) NSString *name; @property (nonat
我有一个使用 Swift 的 XMLParser,运行良好。但是,有时会出现与我想要的实际节点同名的节点。因此,当这些额外的节点出现时,一切都会变得困惑。这是良好场景的示例。这已经被简化了一点以帮助解
有一段时间我一直在使用 SWXMLHash用于在我的项目中解析 XML,但现在它目前不支持 Swift 3.0,所以我决定开始使用我自己的 XML 解析类来实现这一点。 我已经完成了基础工作,但是没有
我知道 xmlreader 和其他基于树的解析器(如 simplexml 和 dom)之间的区别。但是xmlreader和xmlparser有什么区别呢?使用一个比另一个有什么好处吗? 我需要解析比较
我做了一个 RSSParser,我不想将日期从 yyyy-MM-dd'T'HH:mm:ssZ 转换为 dd/MM/yyyy: func setDateForCell(cell:ActuTblCell,
我有一些 XML 文件,如果 name == testName,我想更改 name。所以我写了这样的东西,但它不起作用。我哪里做错了?它向我打印参数类型不匹配,我不知道为什么。 String xmlD
我正在使用 groovy XmlParser 读取 xml- 文件,例如: def myXMLContent = new XmlParser().parse(new File("myFile.xml"
我在 React Native App 中工作,只是想执行这段代码 fetch('https://ad13.adfarm1.adition.com/banner?sid=3915124&wpt=X.x
我正在尝试从预设的 xml 文件中提取值,但当我尝试检查该值是什么时,我总是得到 null。 if (pulled.equals("preset")) { presetName = xmlPa
在我的 VC 中,我调用了一个 XML 网络服务。根据结果,我可能会转向另一家 VC。我已经从我的代码中删除了业务逻辑,只留下重要的部分。这是我的代码的简短版本: func parser(_ pa
我想解析和下载当前的 EUR - USD 汇率。我决定从 the European Central Bank Feed 中获取值. 我正在使用 CheatyXML XMLParser 扩展。 如何获取
我有一个实用程序方法,它使用创建为 etree.XMLParser(recover=True) 的解析器来解析 XML。我想在单元测试中测试失败场景。除了空输入抛出 lxml.etree.XMLSyn
我是一名优秀的程序员,十分优秀!