2009-10-23 18 views
9

Wiem, że każdy język jest zdolny do parsowania XML; Naprawdę szukam tylko zalet lub wad, które możesz napotkać we własnych doświadczeniach. Perl będzie moim standardem, ale jestem otwarty na sugestie.Parsowanie XML - odpowiednie języki skryptowe/pakiety do pracy?

Dzięki!

AKTUALIZACJA: Skończyłem z XML :: Simple, który wykonał dobrą robotę, ale mam jedną radę, jeśli planujesz z niej skorzystać - najpierw zbadaj opcję forcearray. Musiałem przepisać kilka stwierdzeń po tym, jak nauczyłem się, że najlepiej jest ustawić siłę sił. This strona miała najjaśniejsze wyjaśnienie, jakie mogłem znaleźć. Szczerze mówiąc, jestem zaskoczony, że to nie jest domyślne zachowanie.

+0

Zależy to przede wszystkim od tego, co należy zrobić, oprócz parsowania XML i prawdopodobnie także od tego, czy czujesz się komfortowo z takim czy innym językiem. Zarówno Python jak i C# mają świetne wsparcie dla parsowania XML i są bardzo elastyczne, C++ ma również dobre biblioteki do tego, chociaż sam w sobie jest bardziej restrykcyjny i poprosi o bardziej staranne planowanie (niekoniecznie złe). – RedGlyph

+0

Pytasz już o prawidłowy analizator składni, więc zignoruj ​​ostrzeżenia i pogadanki na temat używania wyrażeń regularnych na tej stronie, ale na dole, daje to propozycje parsera dla różnych języków: http://htmlparsing.icenine.ca – genio

+3

Sądzę, że jestem jedynym, który myśli, że to pytanie nie ma nikogo ** w prawo ** odpowiedź bez dalszych konkretnych kryteriów. –

Odpowiedz

10

Jeśli używasz Perl to polecam XML::Simple:

Ponieważ coraz więcej stron internetowych rozpoczęciem korzystania XML za ich treść, to coraz ważniejsze dla Web deweloperzy wiedzieć, jak do analizowania XML dane i przekonwertuj je na różne formaty . W tym miejscu pojawia się moduł Perl o nazwie XML :: Simple. Odbiera on drukarnię danych XML, , dzięki czemu proces ten jest łatwiejszy niż kiedykolwiek wcześniej.

+4

XML :: Prosty jest do przyjęcia * czasami *, ale jeśli chodzi o złożone, ściśle sformatowane dane, często jest to większy problem niż jest to warte. Zamiast tego chciałbym wypróbować XML :: Twig lub XML :: LibXML. – hobbs

+1

Lub gdy XML jest duży - użycie dowolnego parsera DOM, w tym XML :: Simple, jest bardzo złym pomysłem. – Aye

10

XML::Twig jest bardzo ładne, zwłaszcza, że ​​nie jest tak strasznie szczegółowe, jak niektóre inne opcje.

+5

Sekundę dla XML :: Twig, szczególnie jeśli musisz radzić sobie z ogromnymi zbiorami danych. – squeeks

+1

XML :: Twig umożliwia przetwarzanie XML w trybie mieszanym. –

7

Dla czystej parsowania XML, nie użyłby Java, C#, C++, C, itd Mają tendencję do overcomplicate rzeczy, jak chcesz w banana i uzyskać goryla z nim również.

Bardziej odpowiednie są języki wyższego poziomu i języki interpretowane, takie jak Perl, PHP, Python, Groovy. Perl jest zawarty w praktycznie każdej dystrybucji Linuksa, tak jak w większości PHP.

Ostatnio użyłem Groovy'ego, szczególnie w tym i okazało się to bardzo łatwe. Pamiętaj jednak, że parser C będzie na przykład o kilka rzędów szybszy niż Groovy.

+2

Parsowanie XML jest C# jest proste, co było używane do zgłoszenia tak złe wrażenia? Czy chodziło o coś innego niż standardowe biblioteki? Dla porównania, nie przypisałbym Perla i PHP jako "wyższego języka", nie są one prawdziwymi językami zorientowanymi obiektowo. – RedGlyph

+0

Użyłem Mono (kompatybilny z .net 2.0). Powiedziałem też, że język wyższego poziomu, a nie wyższy, robię Googling, żeby zobaczyć, co to znaczy. –

+0

Ach, twoje zdanie wyglądało jak porównanie, ale po prostu miałeś na myśli język wysokiego poziomu - i nie, zazwyczaj nie używam Google ani Wikipedii do sprawdzania definicji słów, ale rozumiem, że to często popełniany błąd, który często robią inni ;-) case, System.Xml jest również w Mono i nie znalazłem niczego nadmiernie skomplikowanego na ten temat. To właśnie podkreśla inne ważne kryterium, że trzeba czuć się swobodnie w języku programowania. – RedGlyph

1

Python ma całkiem dobre wsparcie dla XML. Od standardowych pakietów DOM biblioteki do znacznie bardziej "pythonic" bibliotek, które parsują XML bezpośrednio do bardziej użytecznych struktur obiektów.

Chociaż nie istnieje tak naprawdę "odpowiedni" język ... w dzisiejszych czasach istnieją dobre pakiety XML dla większości języków.

6

Wszystko będzie w bibliotekach.

Python ma wspaniałe biblioteki dla XML. Moją preferencją jest lxml. Używa libxml/libxslt, więc jest szybki, ale powiązanie Pythona czyni go naprawdę łatwym w użyciu. Perl może równie dobrze mieć równie niesamowite biblioteki OO.

3

Niezupełnie język skryptowy, ale można również rozważyć Scala. Możesz zacząć od here.

+0

+1 dla Scala ... i jeszcze piętnaście znaków – wheaties

4

Widziałem, że ludzie zalecają XML :: Proste, jeśli zdecydujesz się na Perl.

Podczas gdy XML :: Simple jest rzeczywiście bardzo prosty w użyciu i świetny, jest parserem DOM. W związku z tym, niestety, całkowicie nie nadaje się do przetwarzania dużych plików XML, ponieważ procesowi zabrakłoby pamięci (jest to powszechny problem dla każdego parsera DOM , nie ograniczonego do XML :: Simple lub Perl).

Tak więc, w przypadku dużych plików, musisz wybrać parser SAX w wybranym języku (w Perlu jest wiele analizatorów XML SAX lub użyj innego analizatora strumieniowego, takiego jak XML :: Twig, który jest nawet lepszy niż standardowy analizator składni SAX. Nie można mówić w innych językach).

+0

XML :: Twig to (zdecydowanie!) NOT SAX. Został zaprojektowany tak, aby był łatwiejszy w użyciu SAX, a jednocześnie był skierowany strumieniowo. – mirod

0

Czytanie danych z plików XML jest łatwe z C# i LINQ do XML!

Jakkolwiek, mimo że naprawdę kocham Pythona, ciężko mi było sparsować XML ze standardowymi bibliotekami.

3

Obsługa XML Scala jest raczej dobra, zwłaszcza, że ​​XML można po prostu wpisywać bezpośrednio w programach Scala.

Microsoft zrobił też kilka fajnych zintegrowany rzeczy z ich LINQ for XML

Ale naprawdę jak Elementtree i po prostu, że sam pakiet jest dobry powód, aby użyć Python zamiast Perl;)

Oto przykład:

import elementtree.ElementTree as ET 

# build a tree structure 
root = ET.Element("html") 

head = ET.SubElement(root, "head") 

title = ET.SubElement(head, "title") 
title.text = "Page Title" 

body = ET.SubElement(root, "body") 
body.set("bgcolor", "#ffffff") 

body.text = "Hello, World!" 

# wrap it in an ElementTree instance, and save as XML 
tree = ET.ElementTree(root) 
tree.write("page.xhtml") 
0

Powiedziałbym, że to zależy jak wszystko inne. VB.NET 2008 używa literałów XML, ma IntelliSense dla LINQ to XML i kilka zabawek mocy, które pomagają przekształcić XML w XSD. Tak więc osobiście, jeśli pracujesz w środowisku .NET, uważam, że jest to najlepszy wybór.

1

Jeśli zamierzasz użyć do tego celu Ruby, zechcesz zapoznać się z Nokogiri lub Hpricot. Obie mają swoje mocne i słabe strony. Wybór języka i pakietu sprowadza się do tego, co chcesz zrobić z danymi po ich przeanalizowaniu.