【问题标题】:Add An XML Declaration To String Of XML将 XML 声明添加到 XML 字符串
【发布时间】:2012-12-29 05:17:00
【问题描述】:

我有一些 xml 数据,看起来像..

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

我想在这个字符串中添加"&lt;?xml version=\"1.0\"?&gt;"。然后将 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();

【问题讨论】:

标签: c# xml


【解决方案1】:

使用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());

【讨论】:

  • 编码是 utf-16 我需要 utf-8 是不是很容易修复这段代码?
  • 我添加了 this..Encoding=System.Text.Encoding.UTF8 但编码保持 utf-16
  • +1。 @NickLaMarca - 检查建议的重复项 - 它包含您需要的所有信息(您需要具有所需编码的编写器,StringWriter 显然仅是 UTF-16)。
  • 此代码一直有效,但 UTF 部分除外。如何修改此代码以使用内存流而不是流编写器?
  • @NickLaMarca 我不得不摆脱 StringWriter 并改用内存流。它现在生成一个带有 UTF-8 编码的 xml 声明...
猜你喜欢
  • 2011-04-01
  • 2011-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多