C# Xml文档操作快速上手
程序员文章站
2022-05-23 10:40:53
...
现在各大数据库公司都在开发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文件内容如下:
<Book>
<小说 序号="1">
<书名>哈利 波特</书名>
<作者>杰克 罗琳</作者>
</小说>
<小说 序号="2">
<书名>致青春</书名>
<作者>辛夷坞</作者>
</小说>
</Book>
输出如下:
哈利 波特
杰克 罗琳
致青春
辛夷坞
哈利 波特
致青春
2
若文章有知识性错误,欢迎指正!
首先我们要知道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) { } } } }
写入的Xml文件内容如下:
<Book>
<小说 序号="1">
<书名>哈利 波特</书名>
<作者>杰克 罗琳</作者>
</小说>
<小说 序号="2">
<书名>致青春</书名>
<作者>辛夷坞</作者>
</小说>
</Book>
输出如下:
哈利 波特
杰克 罗琳
致青春
辛夷坞
哈利 波特
致青春
2
若文章有知识性错误,欢迎指正!