2010-02-04 30 views
10

Vì vậy, tôi có một số dữ liệu trong các hình thức:Chức năng .NET được tích hợp cho các ký tự không định dạng trong luồng XML?

<foo><bar>test</bar></foo> 

lớp .NET gì/chức năng tôi muốn sử dụng để chuyển đổi này để một cái gì đó khá và viết nó ra vào một tập tin tìm kiếm một cái gì đó như thế này:

<foo> 
    <bar> 
     test 
    </bar> 
</foo> 

Hãy cụ thể về các chức năng và lớp học, không chỉ "sử dụng System.XML". Dường như có rất nhiều cách khác nhau để làm những việc trong NET sử dụng XML :(

Cảm ơn

Trả lời

14

Sử dụng lớp System.Xml.XmlDocument ...

Dim Val As String = "&lt;foo&gt;&lt;bar&gt;test&lt;/bar&gt;&lt;/foo&gt;" 
Dim Xml As String = HttpUtility.HtmlDecode(Val) 

Dim Doc As New XmlDocument() 
Doc.LoadXml(Xml) 

Dim Writer As New StringWriter() 
Doc.Save(Writer) 

Console.Write(Writer.ToString()) 
+1

-1 cho VB, +2 để chính xác những gì tôi muốn. Cảm ơn :) – Polaris878

+0

Ngoài ra, có một sự thay thế cho các cuộc gọi đến HttpUtility.HtmlDecode (str) ?? Tôi không thích phải kéo vào System.Web chỉ cho chức năng đó ... – Polaris878

+0

XmlDocument không thực sự làm bất cứ điều gì ở đây, như được viết. HtmlDecode đang thực hiện tất cả công việc. Nếu bạn bỏ qua cuộc gọi HtmlDecode và sử dụng XmlDocument để rút ra các giá trị XmlElements/XmlAttribute (thông qua .ChildNodes, .SelectNode [s], v.v.), Giá trị của các đối tượng đó sẽ bị loại trừ một cách chính xác. – technophile

8

bạn có thể sử dụng mã này.

string p = "&lt;foo&gt;&lt;bar&gt;test&lt;/bar&gt;&lt;/foo&gt;"; 
Console.WriteLine(System.Web.HttpUtility.HtmlDecode(p)); 
-3

Đây là thứ tôi sử dụng, chuyển vào chuỗi Xml, đặt ToXml thành true nếu bạn muốn chuyển đổi chuỗi chứa "< foo/> < bar/> "với số lượng tương đương xml gốc," #lt; foo/# gt; #lt; bar # gt; "- thay thế băm bằng dấu và vì trình chỉnh sửa này tiếp tục thoát nó ... tương tự , nếu ToXml là sai, nó sẽ chuyển đổi một chuỗi chứa "#lt; foo/# gt; #lt; thanh # gt;" (thay thế băm bằng ký hiệu và) để "< foo/> < thanh/> "

 
string XmlConvert(string sXml, bool ToXml){ 
    string sConvertd = string.Empty; 
    if (ToXml){ 
     sConvertd = sXml.Replace("<", "#lt;").Replace(">", "#gt;").Replace("&", "#amp;"); 
    }else{ 
     sConvertd = sXml.Replace("#lt;", "<").Replace("#gt;", ">").Replace("#amp;", "&"); 
    } 
    return sConvertd; 
} 

(lại đặt băm bằng ký hiệu và như trình soạn thảo này tiếp tục thoát ra bên trong các thẻ trước)

Edit: Nhờ technophile để chỉ ra rõ ràng, nhưng được thiết kế để trang trải chỉ sự Các thẻ XML. Đó là ý chính của hàm, có thể dễ dàng mở rộng để bao gồm các thẻ XML khác và cảm thấy tự do để thêm nhiều thứ mà tôi có thể đã bỏ lỡ! Chúc mừng! :)

+0

-1: Không xử lý chính xác tất cả các giá trị đã thoát (giá trị Unicode, các giá trị thực thể XML khác, v.v.). – technophile

+1

Nó sẽ không xử lý dấu ngoặc kép, một trong hai điều này khá quan trọng trong việc xử lý các thuộc tính. Sử dụng một danh sách cụ thể để cố gắng làm thay thế vốn đã tồi tệ hơn việc sử dụng một API phù hợp với đặc tả XML và sẽ xử lý mọi thứ một cách chính xác mà không cần bandaids vào lần tới bạn muốn xử lý " hoặc bất kỳ thứ gì. – technophile

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