Groovy XmlSlurper против XmlParser


Я искал некоторое время по этой теме и нашел некоторые результаты тоже, которые я упоминаю в конце поста. Может ли кто-нибудь помочь мне точно ответить на эти три вопроса для случаев, перечисленных ниже?

  1. для каких случаев использования xmlsluper имеет больше смысла, чем XmlParser и наоборот (с точки зрения простоты использования API/синтаксиса)?

  2. какой из них более эффективный для памяти? (похоже, Slurper)

  3. какой из них обрабатывает xml быстрее?

случай a. когда я должен прочитать почти все узлы в xml?

случай b. когда мне нужно прочитать только несколько узлов (например, используя выражение gpath)?

Case 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

заводной док (XmlParser,XmlSlurper) и сайт groovy объясняет их хорошо (здесь и здесь) но не делает большую работу в объяснении вышеупомянутого вопроса.

2 69

2 ответа:

большая разница между XmlSlurper и XmlParser заключается в том, что синтаксический анализатор будет создавать что-то похожее на DOM, в то время как Slurper пытается создавать структуры только в случае реальной необходимости и, таким образом, использует пути, которые лениво оцениваются. Для пользователя оба могут выглядеть очень одинаковой. Разница заключается в том, что структура парсера оценивается только один раз, пути slurper могут быть оценены по требованию. По требованию можно прочитать как" более эффективная память, но медленнее " здесь. В конечном счете это зависит от того, сколько пути/запросы, которые вы делаете. Если вы, например, хотите только знать значение атрибута в определенной части XML, а затем сделать с ним, XmlParser все равно обработает все и выполнит ваш запрос на quasi DOM. В том, что будет создано много объектов, потратят память и процессор. XmlSlurper не будет создавать объекты, таким образом сохранить память и процессор. Если вам все равно нужны все части документа, slurper теряет преимущество, так как он создаст по крайней мере столько объектов, сколько будет парсер.

оба могут выполнять преобразования в документе, но slurper предполагает, что это константа, и поэтому вам придется сначала записать изменения и создать новый slurper для чтения нового xml. Парсер поддерживает просмотр изменений сразу же.

таким образом, ответ на вопрос (1), вариант использования, будет заключаться в том, что вы используете парсер, если вам нужно обработать весь XML, slurper, если только его части. API и синтаксис на самом деле не играют большой роли в этом. Заводной человек попробуйте сделать эти два очень похожи в пользовательском опыте. Кроме того, вы предпочли бы парсер над slurper, если вы хотите внести инкрементные изменения в XML.

это введение выше также объясняет, что является более эффективным для памяти, Вопрос (2). Slurper, если вы все равно не читаете, то парсер может, но у меня нет фактических чисел о том, насколько велика разница.

также на вопрос (3) можно ответить введением. Если у вас есть несколько ленивых оценены пути, вы должны eval снова, то это может быть медленнее, чем если бы вы просто перемещаться по существующему графику, как в синтаксическом анализаторе. Таким образом, парсер может быть быстрее, в зависимости от вашего использования.

поэтому я бы сказал (3a) чтение почти всех узлов само по себе не имеет большого значения, так как тогда запросы являются более определяющим фактором. Но в случае (3b) я бы сказал, что slurper быстрее, если вам просто нужно прочитать несколько узлов, так как ему не нужно будет создавать полную структуру в памяти, которая в сама уже стоит времени и памяти.

Что касается (3c)... в эти дни оба могут обновлять / преобразовывать XML, который быстрее на самом деле больше связан с тем, сколько частей xml вам нужно изменить. Если многие части я бы сказал парсер, если нет, то, возможно, slurper. Но если вы хотите, например, изменить значение атрибута с "Fred" на "John" с помощью slurper, просто чтобы позже запросить этот "John", используя тот же slurper, это не сработает.

Я Дам Вам Четкие Ответы:

*XML парсер быстрее, чем XML Slurper.
* XML Slurper потребляет меньше памяти, чем XML Parser.
* XML Parser может анализировать и обновлять XML одновременно.
*Для XML Slurper вам нужно MarkupBuild XML после каждого обновления Вы делаете.
*Если вы хотите использовать выражения пути XML Slurper будет лучше, чем парсер.
*Для чтения почти всех узлов XML Parser будет отлично

Надеюсь, Что Это Помогает