2011-09-26 10 views
5

Tôi đang lấy nguồn của trang web. Sau đó tôi muốn trích xuất một phần cụ thể của nó. Ý định của tôi là làm điều này với LINQ-to-XML.Giải pháp cho lỗi "tiền tố không khai báo" trên XElement.Load()

Tuy nhiên, tôi nhận được lỗi khi tôi phân tích các nguồn:

XElement source = XElement.Load(reader); 

Vấn đề có vẻ là tài liệu tham khảo để không gian tên tôi không có. Tôi gặp lỗi: 'addthis' is an undeclared prefix. Line 130, position 51. do dòng này:

<div class="addthis_toolbox addthis_pill_combo" addthis:url="http://www.foo.com/foo"> 

Và nếu tôi xóa điều đó, sự cố khác xảy ra.

Thing là, tôi chỉ quan tâm đến một phần của tệp XML này - tôi không cần phân tích toàn bộ tệp. Tôi chỉ muốn nó trong một XElement vì vậy tôi có thể thấy rằng một phần của nó. Có cách nào để tôi hack xung quanh lỗi phân tích cú pháp không? Và tôi cần một giải pháp chung - Tôi muốn phân tích cú pháp tệp bất kể có lỗi nào về số ANY undeclared prefix.

Cảm ơn

Trả lời

5

XML này không hợp lệ.

Để sử dụng tiền tố không gian tên (chẳng hạn như addthis:), không gian tên phải được khai báo, bằng cách viết xmlns:addthis="some URI". Nói chung, bạn không nên phân tích cú pháp HTML bằng trình phân tích cú pháp XML, vì HTML có thể là XML không hợp lệ, vì lý do này và một số lý do khác (thực thể chưa khai báo, JS không thoát, thẻ không được đính kèm).
Thay vào đó, hãy sử dụng HTML Agility Pack.

+0

Bạn đang nói đúng, và tôi cảm thấy hơi ngớ ngẩn khi hỏi. Cảm ơn các liên kết, nó có vẻ là những gì tôi cần. –