C# Xml文档操作快速上手
现在各大数据库公司都在开发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文档写入,再读取其中的内容
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);
}
public static void Main(string[] args) {
XmlDeal xmlDeal = new XmlDeal();
xmlDeal.xmlWrite();
xmlDeal.xmlRead();
while (true) { }
}
}
}
写入的Xml文件内容如下:
<Book>
<小说 序号="1">
<书名>哈利 波特</书名>
<作者>杰克 罗琳</作者>
</小说>
<小说 序号="2">
<书名>致青春</书名>
<作者>辛夷坞</作者>
</小说>
</Book>
输出如下:
哈利 波特
杰克 罗琳
致青春
辛夷坞
哈利 波特
致青春
若文章有知识性错误,欢迎指正!