2010-03-09 36 views
161

这里是我当前如何转换的XMLDocument字符串的XmlDocument转换为字符串

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本身包含一个“\”

回答

149

它没有任何引号。这只是VS调试器。尝试打印到控制台或保存到文件,你会看到。作为一个方面说明:总是处置一次性对象:

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

做了一个MessageBox.Show()和你是正确的:) – akif 2010-03-09 07:39:52

+2

+1固定代码使用'使用'块而不是'XmlTextWriter'。 – 2010-03-09 08:02:29

+1

值得注意的是(正如在这里的评论中所提到的:http://msdn.microsoft.com/en-us/library/system.xml.xmlwriter.aspx)直到调用Close方法之后才会写入元素和属性的XmlWriter。 – TonE 2011-08-23 14:47:54

536

假设xmlDoc中是XmlDocument对象什么错xmlDoc.OuterXml?

return xmlDoc.OuterXml; 

OuterXml property返回字符串版本的xml。

+2

嗯,你是对的。我试过,但是当我在调试器中看到引号时。我认为它是因为OuterXml并尝试使用StringWriter方法。但我错了,引号只在调试器中。所以我只会使用OuterXml。谢谢 – akif 2010-03-09 07:43:10

+97

它应该被接受的答案。短而甜蜜:) – 2012-05-16 11:52:38

+0

多数规则! – Robino 2014-04-14 16:03:18

2

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

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; 
      } 
     } 
    } 
} 

我们简单地使用:

yourXmlDoc.AsString() 
+0

这个例子未能在两个编写器上调用Dispose。 – 2015-01-12 21:57:06

+0

更新了示例中的代码。 – SixOThree 2015-02-06 22:51:41

7

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