因为我需要这样做已经有一段时间了所以我正在研究从代码到文件编写XMLDocument的旧学校方法。
在我的应用程序中,我正在写一个带有新元素和值的XML文档,并定期将其保存到光盘,并从文件读取,并根据我正在做的数据。
我正在使用File.Exists(...)_ xmldoc.LoadFile(..)等方法......
我想知道现在可能会有更好的方法来解决这个问题
感谢
答案 0 :(得分:2)
那么LINQ to XML是.NET 3.5中引入的真正漂亮的XML API。除了创建XMLDocument
和XmlReader
s(XmlWriter
/ XmlReader.Create
)的一些更好方法之外,我认为现有的XmlWriter.Create
API没有太大变化。
我不确定你的第二和第三发子弹的真正含义。究竟你在代码中做了什么感觉很尴尬?
答案 1 :(得分:1)
您是否查看了XmlDocument的Save方法?它将保存XmlDocument中的任何内容作为有效的格式化文件。
如果您的程序能够使用XmlDocument类,则XmlDocument类将能够保存您的文件。保存前您无需担心验证,并且可以为其提供所需的任何文件扩展名。至于你的第三点......一个XML文件实际上只是一个文本文件。操作系统如何看待它并不重要。
答案 2 :(得分:1)
我是XmlDocument的忠实粉丝,因为它具有使用的功能,但最近我遇到了该类的巨大内存问题,所以我开始使用XmlReader和XmlWriter。
如果您的Xml文件很复杂,因为您按顺序读取Xml文件,因此使用XmlReader会有点棘手。在这种情况下,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();
}