0

自从我需要这样做已经有一段时间了,所以我正在研究将 XMLDocument 从代码写入文件的老式方法。

在我的应用程序中,我正在使用新元素和值向 XML 文档写入大量内容,并定期将其保存到磁盘上,并根据我正在做的事情从文件中读取数据。

我正在使用 File.Exists(...) _xmldoc.LoadFile(..) 等方法...

我想知道现在可能有更好的方法来解决这个问题

  • 解析 XML
  • 检查其格式以保存下来
  • 而不是保存下来的数据被视为文本,而是被视为 XML

也许我正在做的很好,但已经有一段时间了,想知道是否还有其他方法:)

谢谢

4

3 回答 3

2

好吧,有LINQ to XML ,它是.NET 3.5 中引入的一个非常好的 XML API。除了创建s 和s ( / )的XMLDocument一些更好的方法之外,我认为现有的API 没有太大变化。XmlReaderXmlWriterXmlReader.CreateXmlWriter.Create

不过,我不确定您所说的第二个和第三个子弹的真正含义。你到底在做什么感觉尴尬的代码?

于 2009-07-22T09:19:48.273 回答
1

您是否查看过 XmlDocument 的 Save 方法?它会将 XmlDocument 中的任何内容保存为有效的格式化文件。

如果您的程序能够使用 XmlDocument 类,那么 XmlDocument 类将能够保存您的文件。您无需担心在保存之前进行验证,您可以为其指定所需的任何文件扩展名。至于你的第三点...... XML 文件实际上只是一个文本文件。操作系统如何看待它并不重要。

于 2009-07-22T10:47:21.277 回答
1

我是 XmlDocument 的忠实粉丝,因为它易于使用,但最近我遇到了该类的巨大内存问题,因此我开始使用 XmlReader 和 XmlWriter。

如果您的 Xml 文件很复杂,那么使用 XmlReader 可能会有点棘手,因为您是按顺序读取 Xml 文件的。在这种情况下,XmlReader 的 ReadSubTree 方法可能非常有用,因为该方法仅返回当前节点下的 xml 树,因此您将新的 xmlreader 发送到函数以解析子节点内容,一旦完成,您将继续下一个节点。

XmlReader 示例:

string xmlcontent = "<BigXml/>";

using(StringReader strContent = new StringReader(xmlcontent))
{
    using (XmlReader reader = XmlReader.Create(strContent))
    {
        while (reader.Read())
        {
            if (reader.Name == "SomeName" && reader.NodeType == XmlNodeType.Element)
            {
                //Send the XmlReader created by ReadSubTree to a function to read it.
                ReadSubContentOfSomeName(reader.ReadSubtree());
            }
        }
    }
}

XmlWriter 示例:

StringBuilder builder = new StringBuilder();
using (XmlWriter writer = XmlWriter.Create(builder))
{
    writer.WriteStartDocument();

    writer.WriteStartElement("BigXml");
    writer.WriteAttributeString("someAttribute", "42");
    writer.WriteString("Some Inner Text");

    //Write nodes under BigXml
    writer.WriteStartElement("SomeName");
    writer.WriteEndElement();

    writer.WriteEndElement();

    writer.WriteEndDocument();
}
于 2009-07-22T11:37:00.007 回答