提问人:akif 提问时间:3/9/2010 最后编辑:akif 更新时间:1/11/2021 访问量:317487
将 XmlDocument 转换为字符串
Convert XmlDocument to String
问:
以下是我目前将 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 本身包含一个"\"
答:
210赞
Darin Dimitrov
3/9/2010
#1
没有任何引号。它只是 VS 调试器。尝试打印到控制台或保存到文件,您就会看到。附带说明:始终处理一次性物品:
using (var stringWriter = new StringWriter())
using (var xmlTextWriter = XmlWriter.Create(stringWriter))
{
xmlDoc.WriteTo(xmlTextWriter);
xmlTextWriter.Flush();
return stringWriter.GetStringBuilder().ToString();
}
评论
2赞
John Saunders
3/9/2010
+1 用于修复代码以使用块而不是 .using
XmlTextWriter
1赞
TonE
8/23/2011
值得一提的是(如此处的备注中所述:msdn.microsoft.com/en-us/library/system.xml.xmlwriter.aspx),在调用 XmlWriter 的 Close 方法之前,不会写入元素和属性。
0赞
Brian
3/28/2012
其中一些可能会立即写入。这取决于缓冲。无论如何,我添加了一个调用,尽管调用或只是关闭块也会完成相同的工作。Flush
Close
xmlTextWriter
using
18赞
Adam Bruss
9/19/2012
要使 xml 漂亮,请将此设置对象传递给 XmlWriter.Create: XmlWriterSettings settings settings = new XmlWriterSettings();设置。缩进 = true;设置。缩进字符 = “ ”;设置。编码 = Encoding.UTF8;
735赞
Chris Moutray
3/9/2010
#2
假设 xmlDoc 是 XmlDocument 对象,那么 xmlDoc.OuterXml 有什么问题?
return xmlDoc.OuterXml;
OuterXml 属性返回 xml 的字符串版本。
评论
4赞
akif
3/9/2010
好吧,你是对的。我先尝试了一下,但是当我在调试器中看到引号时。我以为这是因为 OuterXml 并尝试使用 StringWriter 方法。但是我错了,引号只在调试器中。因此,我将只使用 OuterXml。谢谢
0赞
SarjanWebDev
10/27/2014
为我工作!只需对 xmlDoc 进行空检查即可!返回 xmlDoc == null ?“xmlDoc 为 null”:xmlDoc.OuterXml;
1赞
Chris Moutray
10/27/2014
@SarjanWebDev如果你认为你的对象可能是空的,那么空检查就不言而喻了,对于这里的每个答案;实际上,对于与 C# 中对象的每次交互 - 就我个人而言,我试图确保始终构造对象,这样我就不必到处用 null 检查来膨胀代码......我想这只取决于你的代码库......
12赞
hazjack
9/28/2015
(y) 但 OuterXml 不包括声明性标记 <?xml version=“1.0” encoding=“utf-16”?>
3赞
Chris Moutray
9/28/2015
@hazjack如果你想要声明性标签,那么就使用 XmlDeclaration 类 msdn.microsoft.com/en-us/library/system.xml.xmldeclaration.aspx - 如果你想把它写到文件中,那么就使用在你的 XmlDocument 实例上找到的保存方法 msdn.microsoft.com/en-us/library/dw229a22.aspx - 对我来说,声明性标签只有在你写文件而不是 C# 字符串时才有意义
2赞
Arsen Mkrtchyan
3/9/2010
#3
"
在调试器中显示,但字符串中的数据是正确的,无需替换任何内容。尝试将字符串转储到文件中,您会注意到该字符串是正确的。\"
6赞
SixOThree
10/2/2012
#4
作为扩展方法:
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()
评论
0赞
Joel Mueller
1/13/2015
此示例无法对两个编写器调用 Dispose。
2赞
Peter Krassoi
11/29/2021
@Joel Mueller Dispose 在离开代码时仍然被调用,尽管返回。
13赞
Whyser
3/1/2016
#5
如果使用的是版本(例如,在 UWP 应用中使用),则可以使用 XML 以字符串形式获取。Windows.Data.Xml.Dom.XmlDocument
XmlDocument
yourXmlDocument.GetXml()
3赞
احمد بندارى
1/11/2021
#6
可以使用属性获取字符串中的 XMLxmlDoc.InnerXml
评论