Большая разница между XmlSlurper и XmlParser заключается в том, что Parser создаст что-то похожее на DOM, в то время как Slurper пытается создавать структуры, только если это действительно необходимо, и поэтому использует пути, которые лениво оцениваются.Для пользователя оба могут выглядеть чрезвычайно равными.Разница в том, что структура синтаксического анализатора оценивается только один раз, траектории логова могут оцениваться по требованию.По требованию здесь можно прочитать как «более эффективный, но более медленный».В конечном итоге это зависит от того, сколько путей / запросов вы делаете.Если, например, вы хотите узнать только значение атрибута в определенной части XML, а затем покончить с этим, XmlParser все равно обработает все и выполнит ваш запрос в квазиодноме DOM.При этом будет создано много объектов, память и процессор.XmlSlurper не будет создавать объекты, тем самым экономя память и процессор.В любом случае, если вам нужны все части документа, slurper теряет преимущество, поскольку он создаст как минимум столько же объектов, сколько и анализатору.
Оба могут выполнять преобразования в документе, но slurper предполагает, что он является константой, и поэтому вам придется сначала записать изменения и создать новый slurper для чтения нового xml-кода. Анализатор поддерживает просмотрсразу меняется.
Таким образом, ответ на вопрос (1), вариант использования, будет, что вы используете синтаксический анализатор, если вам нужно обработать весь XML, блудник, если только его части.API и синтаксис на самом деле не играют большой роли в этом.Groovy люди пытаются сделать эти два очень похожими в пользовательском опыте.Кроме того, вы бы предпочли синтаксический анализатор над slurper, если вы хотите вносить инкрементные изменения в XML.
Это введение выше также объясняет, что является более эффективным с точки зрения памяти, вопрос (2).Нехватка есть, если вы все равно не читаете все, тогда парсер может, но у меня нет фактических цифр о том, насколько велика тогда разница.
Также вступление может ответить на вопрос (3).Если у вас есть несколько ленивых оцененных путей, вы должны выполнить eval снова, тогда это может быть медленнее, чем если бы вы просто перемещались по существующему графику, как в парсере.Таким образом, синтаксический анализатор может быть быстрее, в зависимости от вашего использования.
Так что я бы сказал (3a), что чтение почти всех узлов само по себе не имеет большого значения, так как запросы являются более определяющим фактором.Но в случае (3b) я бы сказал, что slurper быстрее, если вам просто нужно прочитать несколько узлов, поскольку ему не нужно создавать полную структуру в памяти, которая сама по себе уже стоит времени и памяти.
Что касается (3c) ... в наши дни оба могут обновлять / преобразовывать XML, что быстрее на самом деле больше связано с тем, сколько частей xml вам нужно изменить.Если много деталей я бы сказал парсером, если нет, то может быть лохотрон.Но если вы хотите, например, изменить значение атрибута с «Fred» на «John» с помощью slurper, просто для последующего запроса этого «John» с использованием того же slurper, это не сработает.