最快的编写XML的方法是什么?

7

我经常需要创建XML文件,并选择使用XmlWrite来完成这项工作。我发现在一些情况下,它花费了很多时间用于像WriteAttributeString(我需要写很多属性),我的问题是是否有更好的方法来创建XML文件?谢谢。


你知道XML序列化吗?实例化一个类型,填充属性,然后将其序列化以创建代表对象状态的XML文档。 - Cheeso
你走在正确的道路上。XmlWriter 是编写 XML 最快的方式。 - KV Prajapati
定义“更快”。是指编写/调试更快还是执行更快?答案会有所不同。 - Seva Alekseyev
可能实际上瓶颈不是 WriteAttributeString,而是用于提供数据的代码代价太高了?例如,当运行“get”时,属性执行了太多的工作。 - Jakob Möllås
6个回答

6

我知道的最快的方法是将文档结构写成纯字符串并解析为XDocument对象:

string str =
@"<?xml version=""1.0""?>
<!-- comment at the root level -->
<Root>
    <Child>Content</Child>
</Root>";

XDocument doc = XDocument.Parse(str);
Console.WriteLine(doc);

现在,您将拥有一个结构化且可用的XDocument对象,您可以使用它来填充数据。此外,您甚至可以解析一个完全结构化和填充的XML字符串并从那里开始。您也可以始终像这样使用结构化的XElements:

XElement doc =
  new XElement("Inventory",
    new XElement("Car", new XAttribute("ID", "1000"),
    new XElement("PetName", "Jimbo"),
    new XElement("Color", "Red"),
    new XElement("Make", "Ford")
  )
);
doc.Save("InventoryWithLINQ.xml");

这将生成:

<Inventory>
  <Car ID="1000">
    <PetName>Jimbo</PetName>
    <Color>Red</Color>
    <Make>Ford</Make>
  </Car>
</Inventory>

我认为这种方法并不高效,因为你只能在运行时才能检测到结构错误和拼写错误。 - Antoine
1
然后您可以像示例中那样使用结构化的XElement对象。 - Teoman Soygul

3

可以通过例如FileStream(通过手动创建的代码)直接将其写入文件。这样做可能非常快速,但也很难维护。一如既往,优化是有代价的。

另外,不要忘记“过早优化是万恶之源”。


3

XmlSerializer

你只需要定义想要序列化的类的层次结构,就可以了。此外,你还可以通过一些应用于属性的属性来控制模式。


0

0

需要多长时间才算是“很长时间”呢?10毫秒、10秒还是10分钟?写入Xml的整个过程需要多长时间呢?

并不是说你不应该进行优化,但在我看来,这取决于你想花多少时间来优化那些微小的过程。最终,你想要走得越快,在这种情况下就越难以维护(个人意见)。


0

我个人喜欢使用XmlDocument类型。虽然写节点时仍有些繁琐,但属性只需一行即可完成,总体而言比使用Xmlwrite要简单得多。


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