Groovy XmlSlurper vs XmlParser

Przez chwilę szukałem w tym temacie i znalazłem też pewne wyniki, o których wspominam na końcu posta. Czy ktoś może mi dokładnie odpowiedzieć na te trzy pytania w wymienionych poniżej przypadkach?

  1. W jakich przypadkach użycie XmlSluper ma większy sens niż XmlParser i odwrotnie (z punktu widzenia łatwości użycia API/składni)?

  2. Który z nich jest bardziej wydajny w pamięci?

  3. Który przetwarza xml szybciej?

Przypadek a. kiedy muszę odczytać prawie wszystkie węzły w xml?

Przypadek b. kiedy muszę odczytać tylko kilka węzłów (jak użycie wyrażenia gpath)?

Przypadek c. kiedy muszę zaktualizować / przekształcić xml?

Pod warunkiem, że dokument xml nie jest trywialny (z poziomem głębokości i rozmiarem xml).

Zasoby :

Http://www.tutkiun.com/2009/10/xmlparser-and-xmlslurper.html Stany:

Różnica pomiędzy XMLParser i XMLSlurper:

Istnieją podobieństwa między XMLParser i XMLSlurper, gdy są używane do proste czytanie, ale kiedy używamy ich do zaawansowanego czytania i kiedy przetwarzanie dokumentów XML w innych formatach istnieją różnice między dwoma.

XMLParser przechowuje pośrednie wyniki po przetworzeniu dokumentów. Ale na druga ręka,

XMLSlurper nie przechowuje wewnętrznych wyników po przetworzeniu XML dokumenty.

The real, podstawowe różnice stają się widoczne podczas przetwarzania przetwarzane informacje. Dotyczy to przetwarzania danych bezpośrednio na miejscu manipulacja i przetwarzanie w scenariuszu strumieniowym.

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

The groovy doc (XmlParser, XmlSlurper) i strona groovy dobrze je wyjaśnia ( tutaj i tutaj ), ale nie robi Wielkiej roboty w wyjaśnianiu wyżej wymienionych pytanie.

Author: kunal, 2011-09-26

2 answers

Duża różnica między XmlSlurper i XmlParser polega na tym, że Parser stworzy coś podobnego do DOM, podczas gdy Slurper próbuje tworzyć struktury tylko wtedy, gdy jest to naprawdę potrzebne i dlatego używa ścieżek, które są leniwie oceniane. Dla użytkownika oba mogą wyglądać wyjątkowo równo. Różnica jest większa, że struktura parsera jest oceniana tylko raz, ścieżki slurper mogą być oceniane na żądanie. Na żądanie można odczytać jako "bardziej wydajny, ale wolniejszy". Ostatecznie zależy ile / align = "left" / Jeśli na przykład chcesz tylko znać wartość atrybutu w określonej części XML, a następnie wykonać z nim, XmlParser nadal przetworzy wszystkie i wykona Twoje zapytanie na quasi DOM. W tym wiele obiektów zostanie utworzony, pamięci i CPU wydać. XmlSlurper nie wytworzy obiektów, tym samym zapisuje pamięć i procesor. Jeśli i tak potrzebujesz wszystkich części dokumentu, slurper traci przewagę, ponieważ utworzy co najmniej tyle obiektów, co parser.

Oba mogą wykonywać transformacje w dokumencie, ale slurper zakłada, że jest to stała i dlatego będziesz musiał najpierw zapisać zmiany i utworzyć nowy slurper, aby odczytać nowy xml. Parser obsługuje natychmiastowe obserwowanie zmian.

Więc odpowiedź na pytanie (1), przypadek użycia, będzie taka, że używasz parsera, jeśli musisz przetworzyć cały XML, slurper, jeśli tylko jego części. API i składnia nie odgrywają w tym zbyt dużej roli. The Groovy people try to make te dwa bardzo podobne w doświadczeniu użytkownika. Również wolisz parser niż slurper, jeśli chcesz wprowadzać przyrostowe zmiany do XML.

To intro powyżej również wyjaśnia, co jest bardziej wydajne w pamięci, pytanie (2). Slurper jest, chyba że i tak przeczytasz w całości, to parser może, ale nie mam rzeczywistych liczb o tym, jak duża jest wtedy różnica.

Również pytanie (3) może być odpowiedział przez intro. Jeśli masz wiele leniwych ocenianych ścieżek, musisz eval ponownie, może to być wolniejsze niż w przypadku poruszania się po istniejącym wykresie, jak w parserze. Więc parser może być szybszy, w zależności od użycia.

Powiedziałbym więc, że (3A) odczytanie prawie wszystkich węzłów nie robi dużej różnicy, ponieważ wtedy żądania są bardziej decydującym czynnikiem. Ale w przypadku (3b) powiedziałbym, że slurper jest szybszy, jeśli trzeba tylko przeczytać kilka węzłów, ponieważ nie będzie musiał tworzyć kompletnej struktury w pamięci, co samo w sobie już kosztuje czas i pamięć.

Jak dla (3c)... w dzisiejszych czasach oba mogą aktualizować / przekształcać XML, co jest szybsze w rzeczywistości jest bardziej powiązane z tym, ile części xml musisz zmienić. Jeśli wiele części powiedziałbym parser, jeśli nie, to może slurper. Ale jeśli chcesz na przykład zmienić wartość atrybutu z "Fred" NA "John" za pomocą slurpera, po prostu później zapytasz o to "John" używając tego samego slurpera, to nie zadziała.

 95
Author: blackdrag,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-25 03:53:25

Dam Ci Odpowiedzi:

* XML Parser jest szybszy niż XML Slurper.
* XML Slurper zużywa mniej pamięci niż Parser XML.
* XML Parser może analizować i aktualizować XML jednocześnie.
*Dla XML Slurper trzeba Markup Build XML po każdej aktualizacji zrobić.
*Jeśli chcesz użyć wyrażenia ścieżki XML Slurper będzie lepszy niż Parser.
*Do odczytu prawie wszystkich węzłów Parser XML byłby w porządku

Hope It Helps

 0
Author: srinivasan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-02 06:07:58