现在各大数据库公司都在开发Xml数据库(非关系型),而C#将对Xml的操作集成到了语言中,使得程序操作Xml 十分简便,现在让你快速上手Xml操作。
首先我们要知道Xml是树形结构,所以节点的概念十分重要。我们先要知道这些方法和类,具体的应用见下面的代码。
XmlDocument Xml文档类
重要方法有:
Load(xmlPath); //载入Xml文档,xmlPath为路径
Save(xmlPath); //保存Xml文档
重要属性
DocumentElement //根节点
XmlElement 节点类
重要方法:
PrependChild(XmlElement childNode); //将childNode 添加到当前节点的第一个子节点
AppendChild(XmlElement childNode); //将childNode 添加到当前节点的最后一个子节点
SetAttribute(string "属性名",string "属性值");//设置当前节点属性
SelectNodes(string 条件); //通过条件得到子节点,若有多个,返回第一个具体见代码
SelectSingleNode(); //意义同上,返回所有节点 xmlNodeList类
重要属性:
InnerText //节点中的内容
ChildNodes //所有子节点 xmlNodeList类
ParentNode //父节点
先往一个Xml文档写入,再读取其中的内容
首先我们要知道Xml是树形结构,所以节点的概念十分重要。我们先要知道这些方法和类,具体的应用见下面的代码。
XmlDocument Xml文档类
重要方法有:
Load(xmlPath); //载入Xml文档,xmlPath为路径
Save(xmlPath); //保存Xml文档
重要属性
DocumentElement //根节点
XmlElement 节点类
重要方法:
PrependChild(XmlElement childNode); //将childNode 添加到当前节点的第一个子节点
AppendChild(XmlElement childNode); //将childNode 添加到当前节点的最后一个子节点
SetAttribute(string "属性名",string "属性值");//设置当前节点属性
SelectNodes(string 条件); //通过条件得到子节点,若有多个,返回第一个具体见代码
SelectSingleNode(); //意义同上,返回所有节点 xmlNodeList类
重要属性:
InnerText //节点中的内容
ChildNodes //所有子节点 xmlNodeList类
ParentNode //父节点
先往一个Xml文档写入,再读取其中的内容
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Xml;
- namespace XmlDeal
- {
- //操作Xml文档
- class XmlDeal
- {
- private XmlDocument doc;
- private string xmlPath = "C:\Users\Administrator\Desktop\test.xml";
- public XmlDeal() {
- doc = new XmlDocument();
- //加载 Xml(在这之前,你得确保xml中有一个根节点,否则会报错),还可以用流来加载,这里就不演示了
- doc.Load(xmlPath);
- }
- public void xmlWrite() {
- //移除根节点下的所有节点
- doc.DocumentElement.RemoveAll();
- //注意如果按下面的写法写的话,会有一些节点没有被删除,以为根节点的子节点的count在变化,读者好好体会吧
- //foreach (XmlElement rootNode in doc.DocumentElement.ChildNodes) {
- // rootNode.ParentNode.RemoveChild(rootNode);
- //}
- XmlElement node = doc.CreateElement("小说");
- //设置属性
- node.SetAttribute("序号","1");
- //新建子节点
- XmlElement childNode1 = doc.CreateElement("书名");
- node.PrependChild(childNode1);
- childNode1.InnerText = "哈利 波特";
- //插入到父节点的末尾
- node.AppendChild(childNode1);
- XmlElement childNode2 = doc.CreateElement("作者");
- node.PrependChild(childNode2);
- childNode2.InnerText = "杰克 罗琳";
- node.AppendChild(childNode2);
- XmlElement node2 = doc.CreateElement("小说");
- node2.SetAttribute("序号", "2");
- //新建子节点
- XmlElement childNode21 = doc.CreateElement("书名");
- node.PrependChild(childNode21);
- childNode21.InnerText = "致青春";
- //插入到父节点的末尾
- node2.AppendChild(childNode21);
- XmlElement childNode22 = doc.CreateElement("作者");
- node.PrependChild(childNode22);
- childNode22.InnerText = "辛夷坞";
- node2.AppendChild(childNode22);
- //获取文档的根节点,并将 node 添加到根节点的子节点的开头,注意append 不会覆盖以前的数据
- doc.DocumentElement.AppendChild(node);
- doc.DocumentElement.AppendChild(node2);
- doc.Save(xmlPath);
- }
- //查找读入xml中的信息
- public void xmlRead() {
- //得到父节点
- XmlElement root = doc.DocumentElement;
- //得到文本中内容的方法一,通过不断获得子节点获得其中的内容
- XmlNodeList nodeList = root.ChildNodes;
- foreach(XmlElement node in nodeList){
- foreach(XmlElement child in node.ChildNodes){
- Console.WriteLine(child.InnerText);
- }
- }
- Console.WriteLine();
- //得到文本中的内容的方法二,通过表达式,读者可以比较下区别
- XmlNode node1 = doc.SelectSingleNode("/Book/小说/书名");
- Console.WriteLine(node1.InnerText);
- //[]中的是条件格式为 节点[@属性名='属性值']
- XmlNode node2 = doc.SelectSingleNode("/Book/小说[@序号= '2']/书名");
- Console.WriteLine(node2.InnerText);
- //通过节点名获得属性值
- Console.WriteLine(node2.Attributes["序号"].Value);
- }
- public static void Main(string[] args) {
- XmlDeal xmlDeal = new XmlDeal();
- xmlDeal.xmlWrite();
- xmlDeal.xmlRead();
- while (true) { }
- }
- }
- }