a

Câu hỏi Chuyển đổi XmlDocument thành String


Đây là cách tôi hiện đang chuyển đổi XMLDocument đến Chuỗi

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ó " ((trích dẫn) mà tôi có trong các thuộc tính) nó trốn thoát chúng.

Ví dụ:

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

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

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

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


170
2018-03-09 07:31


gốc




Các câu trả lời:


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. Một lưu ý phụ: luôn vứt bỏ vật dụ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();
}

154
2018-03-09 07:33



Đã làm một MessageBox.Show () và bạn đã đúng :) - akif
+1 để sửa mã để sử dụng using khối và không XmlTextWriter. - John Saunders
Đáng chú ý (như đã đề cập trong các nhận xét ở đây: msdn.microsoft.com/en-us/library/system.xml.xmlwriter.aspx) rằng các phần tử và các thuộc tính sẽ không được viết cho đến khi bạn gọi phương thức Close của XmlWriter. - TonE
Một số người trong số họ có thể được viết ngay lập tức. Nó phụ thuộc vào bộ đệm. Bất kể, tôi đã thêm một cuộc gọi đến Flush, mặc dù một cuộc gọi đến Close hoặc chỉ đóng xmlTextWriter  using khối sẽ thực hiện tương tự. - Brian
Để làm cho xml đẹp, vượt qua trong đối tượng cài đặt này để XmlWriter.Create: XmlWriterSettings settings = new XmlWriterSettings (); settings.Indent = true; settings.IndentChars = ""; settings.Encoding = Encoding.UTF8; - Adam Bruss


Giả sử xmlDoc là một đối tượng XmlDocument có gì sai với xmlDoc.OuterXml?

return xmlDoc.OuterXml;

Các Thuộc tính OuterXml trả về một phiên bản chuỗi của xml.


559
2018-03-09 07:35



Vâng, bạn là đú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
Nó NÊN được chấp nhận câu trả lời. Ngắn và ngọt :) - Heshan Perera
@SarjanWebDev nếu bạn nghĩ rằng đối tượng của bạn có thể là null, sau đó kiểm tra null đi mà không nói và cho mọi câu trả lời ở đây; và thực sự cho mọi tương tác với một đối tượng trong C # - cá nhân tôi cố gắng đảm bảo các đối tượng luôn được xây dựng để tôi không phải viết mã với kiểm tra rỗng ở mọi nơi ... tôi đoán nó chỉ phụ thuộc vào cơ sở mã của bạn .. . - Chris Moutray
(y) nhưng OuterXml không bao gồm thẻ khai báo <? xml version = "1.0" encoding = "utf-16"?> - hazjack
@hazjack nếu bạn muốn thẻ khai báo sau đó sử dụng lớp XmlDeclaration msdn.microsoft.com/en-us/library/system.xml.xmldeclaration.aspx- nếu sau đó bạn muốn ghi nó vào tệp thì sử dụng phương thức lưu được tìm thấy trên cá thể XmlDocument của bạn msdn.microsoft.com/en-us/library/dw229a22.aspx - đối với tôi, thẻ khai báo chỉ có ý nghĩa nếu bạn viết để nói tệp chứ không phải chuỗi C # - Chris Moutray


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.


7
2018-03-01 14:09





Là một phương pháp mở rộ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ờ chỉ cần sử dụng:

yourXmlDoc.AsString()

6
2017-10-01 19:36



Ví dụ này không gọi Dispose trên hai nhà văn. - Joel Mueller
Cập nhật mã trong ví dụ. - SixOThree


" được hiển thị là \" trong trình gỡ rố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.


2
2018-03-09 07:35