2010-06-06 24 views
9

Tôi đang cố phân tích cú pháp tệp xml bằng lxml. xml.etree cho phép tôi chỉ cần chuyển tên tệp dưới dạng tham số cho hàm parse, vì vậy tôi đã cố gắng thực hiện tương tự với lxml.cách chuyển một tệp xml sang lxml để phân tích cú pháp?

Mã của tôi:

from lxml import etree 
from lxml import objectify 

file = "C:\Projects\python\cb.xml" 
tree = etree.parse(file) 

nhưng tôi nhận được lỗi:

Traceback (most recent call last): 
    File "cb.py", line 5, in <module> 
    tree = etree.parse(file) 
    File "lxml.etree.pyx", line 2698, in lxml.etree.parse (src/lxml/lxml.etree.c:4 
9590) 
    File "parser.pxi", line 1491, in lxml.etree._parseDocument (src/lxml/lxml.etre 
e.c:71205) 
    File "parser.pxi", line 1520, in lxml.etree._parseDocumentFromURL (src/lxml/lx 
ml.etree.c:71488) 
    File "parser.pxi", line 1420, in lxml.etree._parseDocFromFile (src/lxml/lxml.e 
tree.c:70583) 
    File "parser.pxi", line 975, in lxml.etree._BaseParser._parseDocFromFile (src/ 
lxml/lxml.etree.c:67736) 
    File "parser.pxi", line 539, in lxml.etree._ParserContext._handleParseResultDo 
c (src/lxml/lxml.etree.c:63820) 
    File "parser.pxi", line 625, in lxml.etree._handleParseResult (src/lxml/lxml.e 
tree.c:64741) 
    File "parser.pxi", line 565, in lxml.etree._raiseParseError (src/lxml/lxml.etr 
ee.c:64084) 
lxml.etree.XMLSyntaxError: AttValue: " or ' expected, line 2, column 26 

Tôi đang làm gì sai?

+0

Như đã nói trong câu trả lời được chấp nhận, không có gì sai với 'lxml' ở đây, do đó hãy downvoting câu hỏi. Có thể việc đổi tên tiêu đề của câu hỏi sẽ tránh tìm kiếm sai sự cố trên mô-đun này. –

+0

@ Joel - Tiêu đề câu hỏi của tôi không ngụ ý rằng có gì sai với 'lxml' - chỉ có thể có điều gì đó sai với cách tôi chuyển tệp tới lxml để phân tích cú pháp. Nếu bạn có thể đề xuất một tiêu đề thay thế thì tôi sẽ rất vui khi bắt buộc (nó không rõ ràng từ bình luận của bạn những gì bạn nghĩ rằng tôi nên thay đổi nó). – BeeBand

+0

Hum. Thật lạ lùng, giờ đây tôi không thấy gì sai với tiêu đề:/Vì vậy, có thể tôi đã bỏ lỡ câu hỏi đúng và đã đánh dấu nhầm bạn! Và, tôi không thể loại bỏ downvote mà không cần bạn chỉnh sửa câu hỏi. Nếu bạn làm một chút chỉnh sửa để mở khóa nó, tôi sẽ vui lòng sửa lỗi của tôi. –

Trả lời

1

Những gì bạn đang làm sai là (1) không kiểm tra xem bạn có kết quả tương tự hay không bằng cách sử dụng xml.etree trên cùng một tệp (2) không đọc thông báo lỗi, cho biết lỗi cú pháp trong dòng 2 của tệp xuống dòng từ bất kỳ vấn đề mở tệp nào

+0

John, ý bạn là gì bởi "cùng một kết quả", kết quả giống như những gì? – BeeBand

+1

kết quả tương tự như với lxml, do đó loại trừ lxml là vấn đề –

0

Bạn có lỗi cú pháp trong số Đánh dấu XML của mình. Bạn không làm gì sai.

1

Tôi tình cờ gặp một thông báo lỗi tương tự sáng nay và đối với tôi câu trả lời là một DTD không đúng định dạng. Trong DTD của tôi, đã có một định nghĩa Thuộc tính với một giá trị mặc định không được đính kèm trong dấu ngoặc kép - ngay sau khi tôi thay đổi điều đó, lỗi không xảy ra nữa.

0

lxml cho phép bạn tải một xml bị hỏng bằng cách tạo ra một trường hợp phân tích cú pháp với recover=True

etree.XMLParser(recover=True) 

Trong khi điều này không phải là lý tưởng, tôi sử dụng này để nạp một xml để xác nhận schema/dtd/Schematron.

Các vấn đề liên quan