.NET环境下,XML数据解析 写在前面的 一些事儿:
1. 几个对象:
XmlDocument XmlElement XmlNode
2. 命令空间:
using System XML;
3. XmlNode 与 XmlElement区别:
(1). Element 是一个小范围的定义,必须含有完整信息的节点才能叫做元素;
(2).Node是基本对象,Attribute、 Element、Text 等都是Node的子对象,一个元素一定是一个节点,有节点不一定是元素;
(3).体现在属性和方法中:
XmlNode有属性,ChildNodes(XmlNodeList类型),而XmlElement没有;
XmlElement有方法,GetAttribute 、 SetAttribute , 而XmlElement没有
4. XmlDocument:
CreateElement方法:创建XmlElement对象,有3个重载
(1). CreateElement(“元素名称”)
(2). CreateElement(“元素名称”,“元素的命名空间”)
(3). CreateElement(“元素的前缀”,“元素的名称”,“元素的命名空间”)
SelectSingleNode方法:选择匹配XPath表达式的第一个XmlNode.
public XmlNode SelectSingleNode(string xpath) return 第一个匹配的节点
public XmlNodeList SelectNodes(string xpath) return 匹配节点集合
Save方法: 将XML文档保存在指定位置
Load方法:加载指定的XML数据
DocumentElement属性:获取文档的根XmlElement
5. XmlElement:
SetAttribute 方法:设置具有指定名称的属性的值
GetAttribute方法:获取具有指定名称的属性的值
6. XmlNode
AppendChild方法:将指定的节点添加到该节点的子节点列表的末尾
GetEnumerator方法:提供对XmlNode中节点上“foreach”样式迭代的支持
(XmlElement 继承了上述两种方法,所有也用于“foreach”迭代)
一些XML API 常用方法:
XML文档示例:
<user>
<person name="fengyun" sex="man" age="23">
<pass>
hutong
</pass>
<Address>
yunnan
</Address>
</person>
<person name="fengxing" sex="woman" age="18">
<pass>
hutong
</pass>
<address>
shanxi
</address>
</person>
</user>
XML API比较常用的一些基本方法:
增加XML声明段落:
// 加入XML的声明段落,<Xmlversion="1.0" encoding="gb2312" ?>
XmlDocument xmlDoc = new XmlDocument();
XmlDeclaration XmlDecl = xmlDoc.CreateXmlDeclaration("1.0", "gb2312", null);
xmlDoc.AppendChild(xmlDecl);
// 给一个XML文件加入root根节点
private void CreateRootElement(){
// XmlDocument xmlDoc=new XmlDocument();
XmlElement xmlElem = xmlDoc.CreateElement("user");
xmlDoc.AppendChild(xmlElem);
xmlDoc.Save("user.xml");
}
// 装载XML文件
private void LoadXml(){
if (isFileExisted == false) {
// XmlDocument xmlDoc=new XmlDocument();
CreateRootElement();
isFileExisted = true;
return;
}
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("user.xml");
}
// 增加新元素
public void AddElement(string name, string sex, string age, string pass, string address){
LoadXml();
XmlNode xmlDocSelect = xmlDoc.SelectSingleNode("user");
XmlElement personElement = xmlDoc.CreateElement("person");
personElement.SetAttribute("name", name);
personElement.SetAttribute("sex", sex);
personElement.SetAttribute("age", age);
XmlElement passElement = xmlDoc.CreateElement("pass");
passElement.InnerText = pass; // 设置节点的串联值
personElement.AppendChild(passElement);
XmlElement addElement = xmlDoc.CreateElement("address");
addElement.InnerText = address;
personElement.AppendChild(addElement);
xmlDocSelect.AppendChild(personElement);
xmlDoc.Save("user.xml");
}
// 输出XML文档(XmlNode XmlElement)
public void ShowXml(){
LoadXml();
XmlElement rootElement = xmlDoc.DocumentElement; // 获取XML文档根节点
foreach(XmlElement childElement in rootElement){
console.WriteLine(childElement.GetAttribute("name"));
XmlNodeList grandsonNodes = childElement.childNodes;
foreach(XmlNode grandsonNode in grandsonNodes){
console.WriteLine(grandsonNode.InnerText);
}
}
}
// 查找并修改节点
public void UpdateElement(string name){
LoadXml();
XmlNodeList nodeList = xmlDoc.SelectSingleNode("user").childNodes;
foreach(XmlNode childNode in nodeList){
XmlElement childElement = (XmlElement)childNode;
if (childElement.GetAttribute("name") == name) {
childElement.SetAttribute("name", "BYH");
XmlNodeList grandsonNodes = childElement.ChildNodes;
foreach(XmlNode grandsonNode in grandsonNodes){
XmlElement grandsonElement = (XmlElement)grandsonNode;
if (grandsonElement.Name == "pass") {
grandsonElement.InnerText = "666"
break;
}
}
break;
}
}
xmlDoc.Save("user.xml");
}
// 查找并删除节点
public void deleteNode(string name){
LoadXml();
XmlNodeList childNodes = xmlDoc.SelectSingleNode("user").ChildNodes;
foreach(XmlNode childNode in childNodes){
XmlElement childElement = (XmlElement)childNode;
if (childElement.GetAttribute("name") == name) {
childElement.RemoveAttribute("name"); // 先删属性
childElement.RemoveAll(); // 后删节点
break;
}
}
xmlDoc.Save("user.xml")
}
// 小结
// 定义一个XML操作对象
XmlDocument doc = new XmlDocument();
// 加载一个XML文件
doc.load(@'D:\App.config');
// 获取根节点
XmlNode root = doc.DocumentElement;
// 定义一个属性
XmlAttribute ra = doc.CreateAttribute("name");
// 给属性赋值
ra.value = "zwjz";
// 将属性添加到节点上
root.Attributes.Append(ra);
// 再定义一个子节点
XmlNode root1 = doc.CreateElement("table");
// 给节点赋文本值
root1.InnerText = "sdfl";