2010-10-28 31 views
11

Tôi muốn tải lên một số XmlNode mà không nhận được XmlException khi không có không gian tên không được công nhận.Cách tải đối tượng XmlNode bỏ qua các không gian tên không được khai báo?

Lý do là vì tôi cần chuyển một cá thể XMLNode vào một phương thức. Tôi đang tải các đoạn XML tùy ý có các không gian tên ra khỏi bối cảnh ban đầu của chúng (ví dụ: định dạng MSWord và các sản phẩm phần mềm khác với các lược đồ khác nhau "gây ô nhiễm" nội dung với tiền tố không gian tên của chúng). Các không gian tên không quan trọng đối với tôi hoặc phương pháp đích mà nó được truyền đi. (Điều này là do phương pháp mục tiêu sử dụng nó dưới dạng HTML để hiển thị và không gian tên sẽ bị bỏ qua hoặc bị đàn áp một cách tự nhiên.)

Ví dụ
Dưới đây là một đoạn ví dụ tôi đang cố gắng để làm cho một XmlNode ra khỏi:

<p> 
<div> 
    <st1:country-region w:st="on"> 
    <st1:place w:st="on">Canada</st1:place> 
    </st1:country-region> 
    <hr /> 
    <img src="xxy.jpg" /> 
</div> 
</p> 

Khi tôi cố gắng để tải nó vào một thể hiện XmlDocument (đó là nỗ lực của tôi để có được một XmlNode) tôi có được ngoại lệ XML sau:

'st1' là một tên không khai báo tốc độ. Dòng 3, vị trí 251.

Tôi làm cách nào để lấy một cá thể XmlNode từ loại đoạn XML đó?

Trả lời

29

XmlTextReader có một tài sản Namespaces bạn có thể tắt:

XmlDocument GetXmlDocumentFromString(string xml) { 
    var doc = new XmlDocument(); 

    using (var sr = new StringReader(xml)) 
    using (var xtr = new XmlTextReader(sr) { Namespaces = false }) 
     doc.Load(xtr); 

    return doc; 
} 
+0

Cảm ơn bạn. Điều đó đáp ứng nhu cầu và rất đơn giản. –

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