C# 将XML文档转换为字符串
下面是我当前如何将XMLDocument转换为StringC# 将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
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。