2009-09-03 9 views
11

Tôi muốn phân tích cú pháp một tệp XML nhỏ, đơn giản bằng cách sử dụng python tuy nhiên công việc trên pyXML dường như đã chấm dứt. Tôi muốn sử dụng python 2.6 nếu có thể. Bất cứ ai có thể khuyên bạn nên một phân tích cú pháp XML sẽ làm việc với 2,6?Phân tích cú pháp XML bằng Python

Cảm ơn

Trả lời

18

Nếu nó nhỏ và đơn giản sau đó chỉ cần use the standard library:

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

này sẽ trả về một cây DOM thực hiện các tiêu chuẩn Document Object Model API

Nếu sau đó bạn cần phải làm những điều phức tạp như xác nhận schema hoặc truy vấn XPath sau đó tôi đề nghị bên thứ ba lxml module, là một trình bao bọc xung quanh thư viện libxml2 C phổ biến.

+2

Cảm ơn! Quá dễ dàng. – Alex

3

Liệu lxml có phù hợp với nhu cầu của bạn không? Công cụ đầu tiên tôi chuyển sang để phân tích cú pháp xml.

+3

Ngoài ra, Python 2.5+ đã tích hợp etree. Nó thực hiện những gì số tiền cho một tập hợp con của lxml. Tôi sử dụng etree cho xử lý XML đơn giản và lxml khi tôi cần bất cứ điều gì mà etree không hoàn toàn bao gồm. –

5

Here cũng là một ví dụ rất hay về cách sử dụng minidom cùng với giải thích.

+0

Liên kết dường như chuyển hướng đến trang chủ mà không có www ở phía trước. Đây là một liên kết hoạt động: http://www.diveintopython.net/xml_processing/index.html – Husky

+0

Cố định liên kết. Cảm ơn bạn! –

1

Một vài năm trước, tôi đã viết thư viện để làm việc với có cấu trúc XML. Nó làm cho XML đơn giản hơn bằng cách đưa ra một số giả định hạn chế.

Bạn có thể sử dụng XML cho một thứ như tài liệu xử lý văn bản, trong trường hợp đó bạn có một món súp phức tạp với các thẻ XML được nhúng khắp nơi; trong trường hợp đó thư viện của tôi sẽ không tốt.

Nhưng nếu bạn đang sử dụng XML cho một cái gì đó như tệp cấu hình, thư viện của tôi khá thuận tiện. Bạn định nghĩa các lớp mô tả cấu trúc của XML mà bạn muốn, và một khi bạn đã hoàn thành các lớp, có một phương thức để slurp trong XML và phân tích nó. Việc phân tích cú pháp thực tế được thực hiện bởi xml.dom.minidom, nhưng sau đó thư viện của tôi trích xuất dữ liệu và đặt nó trong các lớp.

Phần tốt nhất: bạn có thể khai báo loại "Bộ sưu tập" sẽ là danh sách Python có không hoặc nhiều phần tử XML khác bên trong nó. Điều này là rất tốt cho những thứ như Atom hoặc RSS feeds (đó là lý do ban đầu tôi thiết kế thư viện).

Đây là URL: http://home.avvanta.com/~steveha/xe.html

Tôi muốn được hạnh phúc để trả lời câu hỏi nếu bạn có bất kỳ.

6

Đối với hầu hết các nhiệm vụ của tôi, tôi đã sử dụng việc thực hiện Minidom Lightweight DOM, từ trang chính thức:

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>')