2014-10-14 21 views
5

Vì vậy, tôi có một số XML:Làm thế nào để ngăn chặn XMLReader ném không hợp lệ XML nhân vật ngoại lệ

<key>my tag</key><value>my tag value &#xB;and my invalid Character</Value>

và một XMLReader:

using (XmlReader reader = XmlReader.Create(new StringReader(xml))) 
{ 
    while (reader.Read()) 
    { 
     //do my thing 
    } 
} 

tôi đã triển khai phương pháp CleanInvalidCharacters từ here nhưng là " & #xB "chưa được mã hóa, nó sẽ không bị xóa.

Lỗi đang được ném vào trình đọc.Read(); có ngoại lệ:

giá trị thập lục phân 0x0B, là ký tự không hợp lệ.

Trả lời

8

Vấn đề là bạn không có XML - bạn có một số chuỗi chắc chắn trông giống như XML nhưng tiếc là không thực sự đủ điều kiện. May mắn thay, bạn có thể nói với XmlReader để được khoan dung hơn:

using (XmlReader reader = XmlReader.Create(new StringReader(xml), new XmlReaderSettings { CheckCharacters = false })) 
{ 
    while (reader.Read()) 
    { 
     //do my thing 
    } 
} 

Lưu ý rằng bạn vẫn sẽ kết thúc với XML, khi đăng, có thể tạo ra vấn đề hơn nữa xuống dòng, vì vậy bạn có thể muốn lọc các nhân vật ra sau nào khi bạn đang đọc nó.

+0

Làm cách nào để lọc các giá trị tiếp tục xuống dưới dòng? Tôi sẽ làm điều đó trong vòng lặp while. Mã hóa nó dưới dạng xml và xóa các ký tự không hợp lệ? – user1

+0

Bạn có thể sử dụng phương pháp 'CleanInvalidCharacters' được đề cập trong bài đăng gốc của bạn trên các nút văn bản, giá trị phần tử và thuộc tính (khi bạn gặp chúng trong vòng lặp while). Nó sẽ hoạt động ngay từ khi các ký tự đã được giải mã. –

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