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);

//通过节点名获得属性值
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

若文章有知识性错误,欢迎指正!
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值