将XmlDocument转换为String

aki*_*kif 206 c# string quotes xmldocument escaping

以下是我目前正在将XMLDocument转换为String的方法

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

xmlDoc.WriteTo(xmlTextWriter);

return stringWriter.ToString();
Run Code Online (Sandbox Code Playgroud)

这种方法的问题是如果我有"((引用)我在属性中)它会逃脱它们.

例如:

<Campaign name="ABC">
</Campaign>
Run Code Online (Sandbox Code Playgroud)

以上是预期的XML.但它回来了

<Campaign name=\"ABC\">
</Campaign>
Run Code Online (Sandbox Code Playgroud)

我可以做String.Replace"\"但是这个方法好吗?有没有什么副作用?如果XML本身包含"\",它会正常工作吗?

Chr*_*ray 630

假设xmlDoc是XmlDocument对象,xmlDoc.OuterXml有什么问题吗?

return xmlDoc.OuterXml;
Run Code Online (Sandbox Code Playgroud)

OuterXml属性返回XML的字符串版本.

  • 它应该被接受答案.简短又甜蜜:) (109认同)
  • (y)但是OuterXml不包含声明性标签<?xml version ="1.0"encoding ="utf-16"?> (9认同)
  • 那你是对的.我先尝试过,但是当我在调试器中看到引号时.我认为它是因为OuterXml并尝试StringWriter方法.但我错了引号仅在调试器中.所以我只使用OuterXml.谢谢 (3认同)
  • @hazjack如果你想要声明性标签然后使用XmlDeclaration类https://msdn.microsoft.com/en-us/library/system.xml.xmldeclaration.aspx - 如果你想将它写入文件然后使用在您的XmlDocument实例https://msdn.microsoft.com/en-us/library/dw229a22.aspx上找到的保存方法 - 对我来说,声明性标记只有在写入文件而不是C#字符串时才有意义 (3认同)

Dar*_*rov 170

没有任何报价.它只是VS调试器.尝试打印到控制台或保存到文件,你会看到.作为旁注:始终处置一次性物品:

using (var stringWriter = new StringWriter())
using (var xmlTextWriter = XmlWriter.Create(stringWriter))
{
    xmlDoc.WriteTo(xmlTextWriter);
    xmlTextWriter.Flush();
    return stringWriter.GetStringBuilder().ToString();
}
Run Code Online (Sandbox Code Playgroud)

  • 要使xml漂亮,请将此设置对象传递给XmlWriter.Create:XmlWriterSettings settings = new XmlWriterSettings(); settings.Indent = true; settings.IndentChars =""; settings.Encoding = Encoding.UTF8; (12认同)
  • +1用于修复代码以使用`using`块而不是`XmlTextWriter`. (2认同)

Why*_*ser 9

如果您使用的Windows.Data.Xml.Dom.XmlDocumentXmlDocument(例如在UWP应用程序中使用)的版本,则可以使用yourXmlDocument.GetXml()将XML作为字符串获取.


Six*_*ree 5

作为扩展方法:

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;
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在简单地使用:

yourXmlDoc.AsString()
Run Code Online (Sandbox Code Playgroud)