两种读写模型 DOM模型
DOM的好处在于它允许编辑和更新XML文档,可以随机访问文档中的数据,可以使用XPath查询,但是,DOM的缺点在于它需要一次性的加载整个文档到内存中,对于大型的文档,这会造成资源问题
流模型
流模型很好的解决了DOM模型的性能问题,因为它对XML文件的访问采用的是流的概念,也就是说,任何时候在内存中只有当前节点,但它也有它的不足,它是只读的,仅向前的,不能在文档中执行向后导航操作。
三种读写方式 方式一:内置DOM库 XmlDocument MSDN传送门:https://msdn.microsoft.com/zh-cn/library/system.xml(v=vs.110).aspx
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 XmlDocument doc = new XmlDocument(); XmlReaderSettings settings = new XmlReaderSettings(); settings.IgnoreComments = true ; XmlReader reader = XmlReader.Create(@"..\..\Book.xml" , settings); doc.Load(XmlReader); XmlNode xn = xmlDoc.SelectSingleNode("bookstore" ); XmlNodeList nodeList = xn.ChildNodes; foreach (XmlNode node in nodeList ){ XmlElement xe = (XmlElement)node; Console.WriteLine(xe.GetAttribute("ISBN" ).ToString()); XmlNodeList subNodes = xe.ChildNodes; Console.WriteLine(subNodes.Item(0 ).InnerText; } reader.Close();
增加删除修改节点详见 Mark://www.cnblogs.com/a1656344531/archive/2012/11/28/2792863.html
方式二:流式读写XmlTextReader和XmlTextWriter API传送门 : https://msdn.microsoft.com/zh-cn/library/system.xml.xmltextreader(v=vs.110).aspx
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 XmlTextReader reader = new XmlTextReader(@"..\..\Book.xml" ); while (reader.Read()){ if (reader.NodeType == XmlNodeType.Element) { if (reader.Name == "book" ) { reader.GetAttribute(0 ); reader.GetAttribute("ISBN" ); } if (reader.Name == "price" ) { reader.ReadElementString(); } } if (reader.NodeType == XmlNodeType.EndElement) { } }
方式三:Linq to XML 强大的Linq, 万能的Linq: https://msdn.microsoft.com/zh-cn/library/system.xml.linq.xelement(v=vs.110).aspx
1 2 3 4 5 6 7 XElement xe = XElement.Load(@"..\..\Book.xml" ); IEnumerable<XElement> elements = from ele in xe.Elements("book" ) where ele.Attribute("ISBN" ).Equals("XX" ) select ele; elements.Remove();