XML文件的读取
来源:互联网 发布:linux vsftpd配置详解 编辑:程序博客网 时间:2024/05/22 11:48
最近项目涉及到Xml文件的读取,所有查找了一些xml文件的读取编辑方式,总结如下:
XML文件读取方法:
<1>.XmlDocument 方式:需要将整个Xml文件加载到内存中
<2>.XmlTextReader 方式:不需要将整个Xml文件加载到内存,但是只能向下读取(大型xml文件适用)<3>.Linq to Xml 方式:配合linq查询语法容易理解
[1]使用XMLDocument
[1.1]读取所有数据
XmlDocument xmldoc=new XmlDocument();//创建XMLDocument对象 XmlReaderSettings settings=new XmlReaderSettings(); settings.IgnoreComments=true;//忽视注释 XmlReader reader=XmlReader.Create(@"",settings); xmldoc.Load(reader);//加载Xml文件 XmlNode node=xmldoc.SelectSingleNode("bookstore");//得到根节点 XmlNodeList nodec=node.ChlidNodes;//得到bookstroe节点下的所有子节点 for(XmlNode node in nodec){ XmlElement xenode=(XmlElement)node;//将节点转化为元素,以便得到节点属性 var s=xenode.GetAttribute("ISBN").ToString();/得到指定名称的属性值 XmlNodeList nodecc=xemodel.ChildNodes; nodecc.Item(index).innerText;//得到当前节点的下标为index的子节点的值 } reader.Close();//最后读取完毕,关掉reader
[1.2]添加节点
1.xmlDocument加载xml文件
2.selectSingleNode获取节点
3.CreateElement 创建元素(节点)
4.Appendhild 添加节点
5.SetAttributeNode 设置节点属性
XmlDocument xmldoc=new XmlDocument(); doc.Load(@"..\..\..\**.xml"); XmlNode root=xmldoc.SelectSingNode("bookstore");//找到跟节点 XmlElement node=xmldoc.CreateElement("book");//创建新元素node [book为元素名称:<book Type="ssss"> </book> ] XmlAttribute nodeAttr=xmldoc.CreateAttribute("Type");//创建元素属性对象 nodeAttr.InnerText="ssss";//设置元素属性值 node.SetAttributeNOde(nodeAttr);//将属性设置为新元素book的属性 XmlElement nodec=xmldoc.CreateElement("author");//创建新元素nodec [author元素名称:<author>dddd</author>] nodec.InnerText="dddd";//设置元素文本内容 node.AppendChild(nodec);//将nodec子元素添加到node内 [<book Type="ssss"> <author>dddd</author> </book>] root.AppendChild(node);//最后将新元素添加到跟节点中 xmldoc.Save(@"..\..\..\**.xml");//保存文件到指定路径
[1.3]清除所有数据
XmlDocument xmldoc=new XMLDocument(); xmldoc.load("");
[1.4]删除节点
SelectSingleNode可以传入一个Xpath表 来找到节点 XmlElement xe=xmldoc.DocumentElement; //DocumentElement获取xml文档对象的根XmlElement string strPath = string.Format("/bookstore/book[@ISBN=\"{0}\"]", dgvBookInfo.CurrentRow.Cells[1].Value.ToString()); XmlElement selectXe = (XmlElement)xe.SelectSingleNode(strPath); selectXe.ParentNode.RemoveChild(selectXe);
1.用Xpath表达是找到要修改的节点
2.SetAttribute设置节点属性值
XmlElement xe = xmlDoc.DocumentElement; // DocumentElement 获取xml文档对象的根XmlElement. string strPath = string.Format("/bookstore/book[@ISBN=\"{0}\"]", dgvBookInfo.CurrentRow.Cells[1].Value.ToString()); XmlElement selectXe = (XmlElement)xe.SelectSingleNode(strPath); //selectSingleNode 根据XPath表达式,获得符合条件的第一个节点. selectXe.SetAttribute("Type", dgvBookInfo.CurrentRow.Cells[0].Value.ToString());//也可以通过SetAttribute来增加一个属性 selectXe.GetElementsByTagName("title").Item(0).InnerText = dgvBookInfo.CurrentRow.Cells[2].Value.ToString(); selectXe.GetElementsByTagName("author").Item(0).InnerText = dgvBookInfo.CurrentRow.Cells[3].Value.ToString(); xmlDoc.Save(@"..\..\Book.xml");[2]XmlTextReader XmlTextWriter [流形式]
[2.1]读取数据
XmlTextReader reader=new XmlTextReader(path);//path为xml文件路径 while(reader.Read()){ if(reader.NodeType==XmlNodeType.Element){ switch(reader.Name){ case "book": reader.GetAttribute(0);//获取节点指定索引的属性值 reader.GetAttribute(1); case "title": reader.ReadElementString().Trim(); case "author": reader.ReadeElementString().Trim(); } } if(reader.NodeType==XmlNodeType==EndElement){ booklist.Add(model); model=new Book(); } } bookList.RemoveAt(modelList.Count-1);补充:上述读取属性值,需事先知道节点有几个属性值
MoveToAttribute
if(reader.Name=="book"){ for(int i=0;i<reader.AttributeCount;i++){ reader.MoveToAttribute(i); string str = "属性:" + reader.Name + "=" + reader.Value; } reader.GetAttribute(0); reader.GetAttribute(1); }[2.2]XmlTextWriter 写xml文件时默认覆盖原文件,如果原文件不存在则创建新文件
WriteStartElement创建元素:
1.WriteStartElement 2.创建子元素 3.WriteEndElement
WriteElementString用来创建单个元素。
WriteAttributeString用来创建属性。
XmlTextWriter xmlWriter = new XmlTextWriter(@"..\..\Book1.xml", null); xmlWriter.Formatting=Formatting.Indented;//使用 Formatting 属性指定 XML 设定为何种格式。子元素就可以通过使用 Indentation 和 IndentChar 属性来缩进。 xmlWriter.WriteStartDocument(flase); xmlWriter.WriteStartElement("bookstore");//创建跟节点 xmlWriter.WriteComment("图书信息");//创建注释 xmlWriter.WriteStartElement("book");//创建图书节点 xmlWriter.WriteAttributeString("Type", "选修课");//创建设置属性值 xmlWriter.WriteAttributeString("ID", "111111111"); xmlWriter.WriteElementString("author","卡耐基");//创建单个节点 xml.Writer.WriteElementString("title", "人性的弱点"); xml.Writer.WriteElementString("price", "56.00"); xmlWriter.WriteEndElement();//图书节点创建完成 xmlWriter.WriteEndElement();//根节点创建完成 xmlWriter.Flush(); xmlWriter.Close();
[3] Linq 查询读取 Xml文件 [3.1] 读取所有数据
XElement xe = XElement.Load(@"..\..\Book.xml"); IEnumerable<XElement> elements = from ele in xe.Elements("book") select ele;//查询出所有标签名book的元素 foreach (var node in elements) { node.Element("author").Value;//获取对应名称子元素的文本内容 node.Element("title").Value; node.Element("price").Value; node.Attribute("ID").Value;//获取属性值 node.Attribute("Type").Value; }
[3.2]插入数据 追加新节点到xml文件中
XElement xe = XElement.Load(path); XElement record = new XElement( new XElement("book", new XAttribute("Type", "选修课"), new XAttribute("ID","1111111"), new XElement("title", "计算机操作系统"), new XElement("author", "xin"), new XElement("price", 28.00) ) ); xe.Add(record); xe.Save(@"..\..\Book.xml");[3.3] 删除数据 删除指定节点
XElement xe = XElement.Load(@"..\..\Book.xml"); IEnumerable<XElement> elements = from ele in xe.Elements("book") where (string)ele.Attribute("ID") == id select ele;//linq查询出指定ID的节点 if(elements.Count()>0){ elements.First().Remove(); } xe.Save(@"..\..\Book.xml");
删除所有节点
XElement xe = XElement.Load(@"..\..\Book.xml"); IEnumerable<XElement> elements = from ele in xe.Elements("book") select ele; if(elements.Count()>){ elements.Remove(); } xe.Save(@"..\..\Book.xml");[3.4]修改节点信息
XElement xe = XElement.Load(@"..\..\Book.xml"); string id = dgvBookInfo.CurrentRow.Cells[1].Value.ToString(); IEnumerable<XElement> element = from ele in xe.Elements("book") where ele.Attribute("ID").Value == id select ele;//查询查指定节点 if (element.Count() > 0){ XElement first=element.First(); first.SetAttributeValue("Type", dgvBookInfo.CurrentRow.Cells[0].Value.ToString());///设置新的属性 first.ReplaceNodes( new XElement("title", dgvBookInfo.CurrentRow.Cells[2].Value.ToString()), new XElement("author", dgvBookInfo.CurrentRow.Cells[3].Value.ToString()), new XElement("price", (double)dgvBookInfo.CurrentRow.Cells[4].Value) );//替换新的节点 } xe.Save(@"..\..\Book.xml");
阅读全文
0 0
- XML文件的读取
- Xml文件的读取
- XML文件的读取
- 文件xml的读取
- XML文件的读取
- xml文件的读取
- xml文件的读取
- xml文件的读取
- xml文件的读取
- xml文件的读取
- XML文件的读取
- 读取简单的xml文件
- 读取xml文件的方式
- 简单的读取xml文件
- xml,Excel文件的读取
- xml,Excel文件的读取
- 简单创建XML文件和读取XML文件的方法
- C# 读取xml文件忽略xml文件的注释
- AOP-Spring的面向切面编程
- 怎么解决动画卡顿
- Python使用CFFI调用C动态库
- 狼羊菜过河问题深入学习分析——Java语言描述版
- CG实验2 二维几何变换
- XML文件的读取
- Eclipse中Maven项目执行Maven update project 项目JRE System Library变为1.5的解决办法
- C和C++中函数指针的用法
- 深入Java集合学习系列:HashSet的实现原理
- ???Minimum Distance in a Star Graph
- HDOJ2011
- 2017.9.25 社交网络 思考记录
- 近期博客写于简书
- 第二十一节HTML5