2009-09-03 31 views
11

Chciałbym parsować prosty, mały plik XML za pomocą Pythona, jednak wydaje się, że praca na pyXML ustała. Chciałbym użyć Pythona 2.6, jeśli to możliwe. Czy ktoś może polecić analizator składni XML, który będzie działał z wersją 2.6?Parsowanie XML w Pythonie

Dzięki

Odpowiedz

18

Jeśli jest to małe i proste a potem po prostu use the standard library:

from xml.dom.minidom import parse 
doc = parse("filename.xml") 

ten powróci do drzewa DOM wdrażającego standardowego Document Object Model API

Jeśli później trzeba zrobić skomplikowane rzeczy jak walidacji schematu lub zapytań XPath, a następnie polecam trzecią stronę lxml module, która jest opakowaniem popularnej biblioteki biblioteki libxml2.

+2

Dzięki! O wiele za łatwo. – Alex

3

Czy lxml pasuje do twoich potrzeb? Jest to pierwsze narzędzie, do którego się włączam podczas analizy xml.

+3

Dodatkowo, Python 2.5+ ma wbudowaną integrację. Implementuje to, co stanowi podzbiór lxml. Używam programu etree do prostego przetwarzania XML i lxml, gdy potrzebuję czegoś, czego etree nie pokrywa. –

5

Here to również bardzo dobry przykład użycia minidomu wraz z objaśnieniami.

+0

Link wydaje się przekierowywać na stronę główną bez strony www przed nią. To działa łącze: http://www.diveintopython.net/xml_processing/index.html – Husky

+0

Naprawiono link. Dziękuję Ci! –

1

Kilka lat temu napisałem bibliotekę do pracy z strukturalną XML. Dzięki temu XML jest prostszy dzięki pewnym ograniczającym założeniom.

Można użyć XML do czegoś takiego jak dokument edytora tekstu, w takim przypadku masz skomplikowaną zupę rzeczy z osadzonymi znacznikami XML w całym miejscu; w takim przypadku moja biblioteka nie byłaby dobra.

Ale jeśli używasz XML dla czegoś jak plik konfiguracyjny, moja biblioteka jest raczej wygodna. Zdefiniujesz klasy, które opisują strukturę XML, którą chcesz, i gdy już zrobisz klasy, istnieje metoda do slurpowania w XML i analizowania go. Rzeczywiste parsowanie odbywa się przez xml.dom.minidom, ale wtedy moja biblioteka wyodrębnia dane i umieszcza je w klasach.

Najlepsza część: możesz zadeklarować typ "kolekcji", który będzie listą Pythona zawierającą zero lub więcej innych elementów XML. To jest świetne dla rzeczy takich jak Atom lub kanały RSS (co było oryginalnym powodem, dla którego zaprojektowałem bibliotekę).

Oto URL: http://home.avvanta.com/~steveha/xe.html

Byłbym szczęśliwy, aby odpowiedzieć na pytania, jeśli masz jakiekolwiek.

6

Dla większości z moich zadań Użyłem realizację minidom lekka dominacja, z oficjalnej strony:

from xml.dom.minidom import parse, parseString 

dom1 = parse('c:\\temp\\mydata.xml') # parse an XML file by name 

datasource = open('c:\\temp\\mydata.xml') 
dom2 = parse(datasource) # parse an open file 

dom3 = parseString('<myxml>Some data<empty/> some more data</myxml>')