C# 将XML文档转换为字符串

C# 将XML文档转换为字符串,c#,string,escaping,quotes,xmldocument,C#,String,Escaping,Quotes,Xmldocument,下面是我当前如何将XMLDocument转换为String StringWriter stringWriter = new StringWriter(); XmlTextWriter xmlTextWriter = new XmlTextWriter(stringWriter); xmlDoc.WriteTo(xmlTextWriter); return stringWriter.ToString(); 这个方法的问题是,如果我有“((引号)在属性中),它就会转义它们 例如: <Ca

下面是我当前如何将XMLDocument转换为String

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

xmlDoc.WriteTo(xmlTextWriter);

return stringWriter.ToString();
这个方法的问题是,如果我有((引号)在属性中),它就会转义它们

例如:

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

上面是预期的XML,但它返回

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


我可以做String.Replace“\”但是这个方法可以吗?有没有副作用?如果XML本身包含“\”

没有任何引号,它可以正常工作。它只是VS debugger。试着打印到控制台或保存到文件,你会看到。附带说明:始终处理一次性对象:

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

假设xmlDoc是一个XmlDocument对象,xmlDoc.OuterXml有什么问题

return xmlDoc.OuterXml;

返回xml的字符串版本。

在调试器中显示为
\”
,但字符串中的数据是正确的,您不需要替换任何内容。尝试将字符串转储到文件中,您会注意到字符串是正确的。

作为扩展方法:

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;
            }
        }
    }
}
现在简单使用:

yourXmlDoc.AsString()

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

您可以使用
xmlDoc.InnerXml
属性获取字符串中的XML

您是对的。我先尝试了,但当我在调试器中看到引号时,我认为这是因为OuterXml,然后尝试了StringWriter方法。但我错了,引号只在调试器中出现。因此,我将使用OuterXml。ThanksWorked为我!只需对xmlDoc执行null检查!返回xmlDoc==null?“xmlDoc为null“:xmlDoc.OuterXml@SarjanWebDev如果你认为你的对象可能是空的,那么空检查就不用说了,这里的每个答案都是空的;实际上,对于C#中与对象的每一次交互,我个人都试图确保对象总是被构造的,这样我就不必在代码中到处都进行空检查了。。。我想这取决于你的代码库…(y)但是OuterXml不包括声明性标记@hazjack如果你想要声明性标记,那么就利用XmlDeclaration类——如果你想将它写入文件,那么就使用XmlDocument实例上的save方法——对我来说,声明性标记只有在你写的是文件而不是C#string+1来修复代码时才有意义使用
using
块而不是
XmlTextWriter
。值得注意的是(如这里的备注所述:)在调用XmlWriter的Close方法之前,不会写入元素和属性。其中一些元素和属性可能会立即写入。这取决于缓冲。无论如何,我添加了一个对
Flush
的调用,尽管调用
Close
或者仅仅使用
块关闭
xmlTextWriter
也可以实现同样的效果。要使xml美观,请将此设置对象传递给XmlWriter。Create:XmlWriterSettings=new XmlWriterSettings();settings.Indent=true;settings.IndentChars=“”;settings.Encoding=Encoding.UTF8;此示例无法对两个编写器调用Dispose。