2010-03-09 25 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作爲字符串獲取。