2011-11-14 11 views
7

Tôi đang đọc tệp xml bằng Python. Nhưng file xml của tôi chứa & nhân vật, bởi vì trong đó trong khi chạy mã Python của tôi, nó mang lại cho các lỗi sau:Python cung cấp lỗi 'Không đúng định dạng xml' vì sự hiện diện của ký tự '&'

xml.parsers.expat.ExpatError: not well-formed (invalid token): 

Có cách nào để bỏ qua & séc bằng python?

+1

thể trùng lặp của [Làm thế nào để thoát khỏi ampersands trong XML?] (Http://stackoverflow.com/questions/1328538/how-do-i-escape-ampersands -in-xml) –

+0

@ James: không thực sự, vì câu hỏi là về cách phân tích cú pháp thứ gì đó gần như nhưng không hoàn toàn là XML, không phải cách tạo XML đúng cách ngay từ đầu. – geoffspear

+3

Bạn có quyền kiểm soát bất kỳ hành vi nào đang tạo tệp XML "gốc" để bạn có thể làm cho nó thực sự cung cấp cho bạn XML hợp lệ không? – geoffspear

Trả lời

6

Không, bạn không thể bỏ qua séc. Tệp 'xml' của bạn không phải là một tệp XML - là một tệp XML, dấu và sẽ phải được thoát. Do đó, không có phần mềm nào được thiết kế để đọc các tệp XML sẽ phân tích nó mà không có lỗi. Bạn cần sửa phần mềm đã tạo ra tệp này để nó tạo ra XML ("đúng ngữ pháp") thích hợp. Tất cả những lợi ích của việc sử dụng XML để trao đổi biến mất hoàn toàn nếu mọi người bắt đầu gửi những thứ không được định dạng đúng và mọi người nhận nó cố gắng vá nó.

+3

Điều này không đúng. 1) Có rất nhiều phần mềm làm phân tích cú pháp một tệp như vậy - bất kỳ trình duyệt internet nào cũng như các IDE như Xcode. 2) Bạn không thể yêu cầu mọi người sửa chữa phần mềm tạo XML chỉ vì trong trường hợp chung nó là phần mềm của bên thứ 3. – LiMar

+0

Có thể có các sản phẩm phần mềm có thể phân tích các tệp như vậy, nhưng một sản phẩm phần mềm như vậy không phải là một trình phân tích cú pháp XML. Các trình phân tích cú pháp XML phù hợp được yêu cầu báo cáo tất cả các lỗi trong các tệp XML. Các trình duyệt Internet, theo như tôi có thể thiết lập, từ chối một tệp được phân phối dưới dạng XML một cách chính xác nếu nó chứa một ký hiệu không thoát. –

+2

Và khi phần mềm tạo ra XML xấu, thì việc sửa chữa nó là giải pháp đúng. Việc tạo ra XML xấu cũng giống như việc tạo ra một định dạng độc quyền của sáng chế của riêng bạn - không có điểm nào trong việc áp dụng một tiêu chuẩn và sau đó không thực hiện nó một cách đúng đắn. –

2

Để tôi thêm dòng "<?xml version='1.0' encoding='iso-8859-1'?>" vào trước chuỗi đã thực hiện thủ thuật.

>>> text = '''<?xml version="1.0" encoding="iso-8859-1"?> 
    ... <seuss><fish>red</fish><fish>blu\xe9</fish></seuss>''' 
>>> doc = elementtree.ElementTree.fromstring(text) 

Giới thiệu trang này https://mail.python.org/pipermail/tutor/2006-November/050757.html