2010-03-09 66 views
161

Sau đây là cách tôi đang chuyển đổi XMLDocument để ChuỗiChuyển đổi XmlDocument để String

StringWriter stringWriter = new StringWriter(); 
XmlTextWriter xmlTextWriter = new XmlTextWriter(stringWriter); 

xmlDoc.WriteTo(xmlTextWriter); 

return stringWriter.ToString(); 

Vấn đề với phương pháp này là nếu tôi có " ((dấu ngoặc kép) mà tôi có trong thuộc tính) nó thoát chúng

ví dụ:.

<Campaign name="ABC"> 
</Campaign> 

Trên đây là XML dự kiến. Nhưng nó sẽ trả về

<Campaign name=\"ABC\"> 
</Campaign> 

tôi có thể làm String.Replace "\" nhưng là phương pháp mà không sao chứ? Có phản ứng phụ nào không? Nó có hoạt động tốt nếu bản thân XML có chứa một số "\"

Trả lời

149

Không có bất kỳ dấu ngoặc kép nào. Nó chỉ là trình gỡ lỗi VS. Thử in bảng điều khiển hoặc lưu vào một tập tin và bạn sẽ thấy. Là một mặt lưu ý: luôn luôn xử lý đối tượng dùng một lần:

using (var stringWriter = new StringWriter()) 
using (var xmlTextWriter = XmlWriter.Create(stringWriter)) 
{ 
    xmlDoc.WriteTo(xmlTextWriter); 
    xmlTextWriter.Flush(); 
    return stringWriter.GetStringBuilder().ToString(); 
} 
+1

Đã làm MessageBox.Show() và bạn đã chính xác :) – akif

+2

+1 để sửa mã để sử dụng các khối 'sử dụng' chứ không phải' XmlTextWriter'. –

+1

Lưu ý đáng giá (như đã đề cập trong các nhận xét ở đây: http://msdn.microsoft.com/en-us/library/system.xml.xmlwriter.aspx) rằng các phần tử và thuộc tính sẽ không được viết cho đến khi bạn gọi phương thức Đóng của XmlWriter. – TonE

536

Giả sử XMLdoc là một XmlDocument đối tượng whats sai với xmlDoc.OuterXml?

return xmlDoc.OuterXml; 

OuterXml property trả về phiên bản chuỗi của xml.

+2

Vâng, bạn đã đúng. Tôi đã thử điều đó trước nhưng khi tôi thấy các dấu ngoặc kép trong trình gỡ lỗi. Tôi nghĩ nó vì OuterXml và thử phương thức StringWriter đó. Nhưng tôi đã sai các dấu ngoặc kép chỉ trong trình gỡ lỗi. Vì vậy, tôi sẽ chỉ sử dụng OuterXml. Cảm ơn – akif

+97

Nó NÊN được chấp nhận câu trả lời.Ngắn và ngọt :) –

+0

Quy tắc lớn! – Robino

2

" được hiển thị là \" trong trình gỡ lỗi, nhưng dữ liệu đúng trong chuỗi và bạn không cần phải thay thế bất kỳ thứ gì. Hãy thử để đổ chuỗi của bạn vào một tập tin và bạn sẽ lưu ý rằng chuỗi là chính xác.

5

Là một phương pháp khuyến nông:

public static class Extensions 
{ 
    public static string AsString(this XmlDocument xmlDoc) 
    { 
     using (StringWriter sw = new StringWriter()) 
     { 
      using (XmlTextWriter tx = new XmlTextWriter(sw)) 
      { 
       xmlDoc.WriteTo(tx); 
       string strXmlText = sw.ToString(); 
       return strXmlText; 
      } 
     } 
    } 
} 

Bây giờ sử dụng đơn giản:

yourXmlDoc.AsString() 
+0

Ví dụ này không gọi là Vứt bỏ trên hai nhà văn. Ví dụ: –

+0

Cập nhật mã. – SixOThree

7

Nếu bạn đang sử dụng Windows.Data.Xml.Dom.XmlDocument phiên bản của XmlDocument (được sử dụng trong các ứng dụng UWP chẳng hạn), bạn có thể sử dụng yourXmlDocument.GetXml() để lấy XML làm chuỗi.

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