2012-12-28 80 views
1

我有,看起来像..添加XML声明字符串XML

<Root> 
<Data>Nack</Data> 
<Data>Nelly</Data> 
</Root> 

我想补充"<?xml version=\"1.0\"?>"这个字符串的一些XML数据。然后将xml保存为一个字符串。

我尝试了一些东西..

这种断裂,失去原有的XML字符串

myOriginalXml="<?xml version=\"1.0\"?>" + myOriginalXml; 

,这并不做任何事,只是保持原始的XML数据,不附加任何声明。

XmlDocument doc = new XmlDocument(); 
       doc.LoadXml(myOriginalXml); 
       XmlDeclaration declaration = doc.CreateXmlDeclaration("1.0", "UTF-8","no"); 
       StringWriter sw = new StringWriter(); 
       XmlTextWriter tx = new XmlTextWriter(sw); 
       doc.WriteTo(tx); 
       string xmlString = sw.ToString(); 

这也似乎不会有任何效果..

XmlDocument doc = new XmlDocument(); 
       doc.LoadXml(myOriginalXml); 
       XmlDeclaration declaration = doc.CreateXmlDeclaration("1.0", "UTF-8", "no"); 
       MemoryStream xmlStream = new MemoryStream(); 
       doc.Save(xmlStream); 
       xmlStream.Flush(); 
       xmlStream.Position = 0; 
       doc.Load(xmlStream); 
       StringWriter sw = new StringWriter(); 
       XmlTextWriter tx = new XmlTextWriter(sw); 
       doc.WriteTo(tx); 
       string xmlString = sw.ToString(); 
+0

的可能重复[我的XDeclaration?](http://stackoverflow.com/questions/6269881/where-is-my-xdeclaration) –

+0

也许我的代码是错误的,但保存文件不工作 –

回答

3

使用一个xmlwritersettings达到节省上更大的控制权。该XmlWriter.Create接受设置(而不是默认的构造器)

var myOriginalXml = @"<Root> 
          <Data>Nack</Data> 
          <Data>Nelly</Data> 
          </Root>"; 
    var doc = new XmlDocument(); 
    doc.LoadXml(myOriginalXml); 
    var ms = new MemoryStream(); 
    var tx = XmlWriter.Create(ms, 
       new XmlWriterSettings { 
          OmitXmlDeclaration = false, 
          ConformanceLevel= ConformanceLevel.Document, 
          Encoding = UTF8Encoding.UTF8 }); 
    doc.Save(tx); 
    var xmlString = UTF8Encoding.UTF8.GetString(ms.ToArray()); 
+0

编码是utf-16我需要utf-8是一个简单的修复这个代码? –

+0

我加了这个..Encoding = System.Text.Encoding.UTF8,但编码仍然是utf-16 –

+0

+1。 @NickLaMarca - 检查建议的重复 - 它包含你需要的所有信息(你需要编码器,你想要的编码,'StringWriter'显然是UTF-16)。 –