.NET 下 XML 数据解析的总结(1)

.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";
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值