如何在使用XElement.Save时省略XML声明?

7

XElement.Save实际上是我需要的,但它会以以下方式开始文件:

<?xml version="1.0" encoding="utf-8"?>

有没有办法防止这种情况发生?

我在创建XElement后,是否应该使用其他类型或方法来保存?

还是应该通过XmlReader.Read跳过那一行?因为这样做我觉得更加脆弱,我假设第一行总是这个xml声明。

最简单的实现方式是什么?


你为什么想要把那个省略掉? - John Saunders
谢谢John,现在我不需要了,因为你读取xml的方法可行。否则,我会在另一个问题中发布的方法中出现错误。 - Joan Venge
3个回答

6
这个例子将名为xmlTree的数据写入文本文件data.xml,但不包括声明行,同时包含缩进格式:
XElement xmlTree = new XElement("Root",
  new XAttribute("Attribute1", 1),
  new XElement("Child1", 1),
  new XElement("Child2", 2)
);
using (var writer = XmlWriter.Create("data.xml", new XmlWriterSettings { OmitXmlDeclaration = true, Indent = true }))
  xmlTree.Save(writer);

5

XElement.ToString() 不会在输出中添加 XML 声明。但我不明白为什么 XmlReader 或任何 XML 解析器都会对标准的 XML 声明感到困惑。


谢谢,当我使用读取器时,它会抛出一个异常,说数据根无效,第一行等。 - Joan Venge
我曾经看到过一个非常类似的错误,是由于文件开头的字节顺序标记引起的。值得调查一下。 - Jon

3
使用XmlWriter可以实现这种能力。
微软的文章:使用XML声明序列化描述了如何控制序列化是否生成XML声明。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接