热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

XMLElement,XMLDocument用法

来源http:www.cr173.comhtml23515_1.html一前言先来了解下操作XML所涉及到的几个类及之间的关系 如果大家发现少写了一些常用的方法,麻烦在评论中指出,

来源http://www.cr173.com/html/23515_1.html

一 前言

先来了解下操作XML所涉及到的几个类及之间的关系  如果大家发现少写了一些常用的方法,麻烦在评论中指出,我一定会补上的!谢谢大家

* 1 XMLElement 主要是针对节点的一些属性进行操作
* 2 XMLDocument 主要是针对节点的CUID操作
* 3 XMLNode 为抽象类,做为以上两类的基类,提供一些操作节点的方法

清楚了以上的关系在操作XML时会更清晰一点

二 具体操作

以下会对Xml的结点与属性做增 删 改 查的操作也满足了实际工作中的大部分情况 

先构造一棵XML树如下,其中也涉及到了写入xml文档的操作

 




  1.  

     




  2.  

    1 public void CreatXmlTree(string xmlPath)




  3.  

    2 {




  4.  

    3 XElement xElement = new XElement(




  5.  

    4 new XElement("BookStore",




  6.  

    5 new XElement("Book",




  7.  

    6 new XElement("Name", "C#入门", new XAttribute("BookName", "C#")),




  8.  

    7 new XElement("Author", "Martin", new XAttribute("Name", "Martin")),




  9.  

    8 new XElement("Adress", "上海"),




  10.  

    9 new XElement("Date", DateTime.Now.ToString("yyyy-MM-dd"))




  11.  

    10 ),




  12.  

    11 new XElement("Book",




  13.  

    12 new XElement("Name", "WCF入门", new XAttribute("BookName", "WCF")),




  14.  

    13 new XElement("Author", "Mary", new XAttribute("Name", "Mary")),




  15.  

    14 new XElement("Adress", "北京"),




  16.  

    15 new XElement("Date", DateTime.Now.ToString("yyyy-MM-dd"))




  17.  

    16 )




  18.  

    17 )




  19.  

    18 );




  20.  

    19




  21.  

    20 //需要指定编码格式,否则在读取时会抛:根级别上的数据无效。 第 1 行 位置 1异常




  22.  

    21 XmlWriterSettings settings = new XmlWriterSettings();




  23.  

    22 settings.Encoding = new UTF8Encoding(false);




  24.  

    23 settings.Indent = true;




  25.  

    24 XmlWriter xw = XmlWriter.Create(xmlPath,settings);




  26.  

    25 xElement.Save(xw);




  27.  

    26 //写入文件




  28.  

    27 xw.Flush();




  29.  

    28 xw.Close();




  30.  

    29 }



然后得到如下的XML树




  1.  

    1 "1.0" encoding="utf-8"?>




  2.  

    2 <BookStore>




  3.  

    3 <Book>




  4.  

    4 <Name BookName="C#">C#入门Name>




  5.  

    5 <Author Name="Martin">MartinAuthor>




  6.  

    6 <Date>2013-10-11Date>




  7.  

    7 <Adress>上海Adress>




  8.  

    8 <Date>2013-10-11Date>




  9.  

    9 Book>




  10.  

    10 <Book>




  11.  

    11 <Name BookName="WCF">WCF入门Name>




  12.  

    12 <Author Name="Mary">MaryAuthor>




  13.  

    13 <Adress>北京Adress>




  14.  

    14 <Date>2013-10-11Date>




  15.  

    15 Book>




  16.  

    16 BookStore>



以下操作都是对生成的XML树进行操作

2.1 新增节点与属性

新增节点NewBook并增加属性Name="WPF"

 




  1.  

    1 public void Create(string xmlPath)




  2.  

    2 {




  3.  

    3 XmlDocument xmlDoc = new XmlDocument();




  4.  

    4 xmlDoc.Load(xmlPath);




  5.  

    5




  6.  

    6 var root = xmlDoc.DocumentElement;//取到根结点




  7.  

    7 XmlNode newNode = xmlDoc.CreateNode("element", "NewBook", "");




  8.  

    8 newNode.InnerText = "WPF";




  9.  

    9




  10.  

    10 //添加为根元素的第一层子结点




  11.  

    11 root.AppendChild(newNode);




  12.  

    12 xmlDoc.Save(xmlPath);




  13.  

    13 }



开篇有写操作xml节点属性主要用XmlElement对象所以取到结点后要转类型 

1 //属性
2 public void CreateAttribute(string xmlPath)
3 {
4 XmlDocument xmlDoc = new XmlDocument();
5 xmlDoc.Load(xmlPath);
6 var root = xmlDoc.DocumentElement;//取到根结点
7 XmlElement node = (XmlElement)xmlDoc.SelectSingleNode("BookStore/NewBook");
8 node.SetAttribute("Name", "WPF");
9 xmlDoc.Save(xmlPath);
10
11 }

效果如下

2.2 删除节点与属性

1 public void Delete(string xmlPath)
2 {
3 XmlDocument xmlDoc = new XmlDocument();
4 xmlDoc.Load(xmlPath);
5 var root = xmlDoc.DocumentElement;//取到根结点
6
7 var element = xmlDoc.SelectSingleNode("BookStore/NewBook");
8 root.RemoveChild(element);
9 xmlDoc.Save(xmlPath);
10 }

删除属性

1 public void DeleteAttribute(string xmlPath)
2 {
3 XmlDocument xmlDoc = new XmlDocument();
4 xmlDoc.Load(xmlPath);
5 XmlElement node = (XmlElement)xmlDoc.SelectSingleNode("BookStore/NewBook");
6 //移除指定属性
7 node.RemoveAttribute("Name");
8 //移除当前节点所有属性,不包括默认属性
9 //node.RemoveAllAttributes();
10 xmlDoc.Save(xmlPath);
11 }

2.3 修改节点与属性

xml的节点默认是不允许修改的,本文也就不做处理了

  修改属性代码如下

1 public void ModifyAttribute(string xmlPath)
2 {
3 XmlDocument xmlDoc = new XmlDocument();
4 xmlDoc.Load(xmlPath);
5 XmlElement element = (XmlElement)xmlDoc.SelectSingleNode("BookStore/NewBook");
6 element.SetAttribute("Name", "Zhang");
7 xmlDoc.Save(xmlPath);
8 }

效果如下

2.4 获取节点与属性

1 public void Select(string xmlPath)
2 {
3 XmlDocument xmlDoc = new XmlDocument();
4 xmlDoc.Load(xmlPath);
5 //取根结点
6 var root = xmlDoc.DocumentElement;//取到根结点
7 //取指定的单个结点
8 XmlNode oldChild = xmlDoc.SelectSingleNode("BookStore/NewBook");
9
10 //取指定的结点的集合
11 XmlNodeList nodes = xmlDoc.SelectNodes("BookStore/NewBook");
12
13 //取到所有的xml结点
14 XmlNodeList nodelist = xmlDoc.GetElementsByTagName("*");
15 }

属性

1 public void SelectAttribute(string xmlPath)
2 {
3 XmlDocument xmlDoc = new XmlDocument();
4 xmlDoc.Load(xmlPath);
5 XmlElement element = (XmlElement)xmlDoc.SelectSingleNode("BookStore/NewBook");
6 string name = element.GetAttribute("Name");
7 Console.WriteLine(name);
8 }

三  linq to XML 操作

 Linq to Xml 也没什么变化只操作对象改变了主要涉及的几个对象如下   注:我并没有用linq的语法去操作元素。

XDocument:用于创建一个XML实例文档

XElement:用于一些节点与节点属性的基本操作

以下是对Xml的 一些简单的操作

3.1 新增节点与属性

1 public void Create(string xmlPath)
2 {
3 XDocument xDoc = XDocument.Load(xmlPath);
4 XElement xElement = xDoc.Element("BookStore");
5 xElement.Add(new XElement("Test", new XAttribute("Name", "Zery")));
6 xDoc.Save(xmlPath);
7 }

属性

1 public void CreateAttribute(string xmlPath)
2 {
3 XDocument xDoc = XDocument.Load(xmlPath);
4 IEnumerable xElement = xDoc.Element("BookStore").Elements("Book");
5 foreach (var element in xElement)
6 {
7 element.SetAttributeValue("Name", "Zery");
8 }
9 xDoc.Save(xmlPath);
10 }

3.2 删除节点与属性

1 public void Delete(string xmlPath)
2 {
3 XDocument xDoc = XDocument.Load(xmlPath);
4 XElement element = (XElement)xDoc.Element("BookStore").Element("Book");
5 element.Remove();
6 xDoc.Save(xmlPath);
7 }

属性

1 public void DeleteAttribute(string xmlPath)
2 {
3 XDocument xDoc = XDocument.Load(xmlPath);
4 //不能跨级取节点
5 XElement element = xDoc.Element("BookStore").Element("Book").Element("Name");
6 element.Attribute("BookName").Remove();
7 xDoc.Save(xmlPath);
8 }

3.3 修改节点属性

节点.net没提供修改的方法本文也不做处理

修改属性与新增实质是同一个方法

1 public void ModifyAttribute(string xmlPath)
2 {
3 XDocument xDoc = XDocument.Load(xmlPath);
4 XElement element = xDoc.Element("BookStore").Element("Book");
5 element.SetAttributeValue("BookName","ZeryTest");
6 xDoc.Save(xmlPath);
7 }

四 总结

把文章写完时,又扫去了自己的一个盲区,虽然都是些简单的操作,但在实际的开中,又何尝不是由简单到复杂呢。我觉得身为程序员就应该遇到自己的盲区时,立马花时间去了解,不说要了解多深入,但至少基本的还是要知道,等到工作中真需时,只要稍微花点时间就可以了。

 



推荐阅读
  • 本文介绍了如何利用JavaScript或jQuery来判断网页中的文本框是否处于焦点状态,以及如何检测鼠标是否悬停在指定的HTML元素上。 ... [详细]
  • 2023 ARM嵌入式系统全国技术巡讲旨在分享ARM公司在半导体知识产权(IP)领域的最新进展。作为全球领先的IP提供商,ARM在嵌入式处理器市场占据主导地位,其产品广泛应用于90%以上的嵌入式设备中。此次巡讲将邀请来自ARM、飞思卡尔以及华清远见教育集团的行业专家,共同探讨当前嵌入式系统的前沿技术和应用。 ... [详细]
  • 本文详细分析了JSP(JavaServer Pages)技术的主要优点和缺点,帮助开发者更好地理解其适用场景及潜在挑战。JSP作为一种服务器端技术,广泛应用于Web开发中。 ... [详细]
  • QBlog开源博客系统:Page_Load生命周期与参数传递优化(第四部分)
    本教程将深入探讨QBlog开源博客系统的Page_Load生命周期,并介绍一种简洁的参数传递重构方法。通过视频演示和详细讲解,帮助开发者更好地理解和应用这些技术。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • 本文详细介绍了如何解决Uploadify插件在Internet Explorer(IE)9和10版本中遇到的点击失效及JQuery运行时错误问题。通过修改相关JavaScript代码,确保上传功能在不同浏览器环境中的一致性和稳定性。 ... [详细]
  • 本文详细介绍了如何使用PHP检测AJAX请求,通过分析预定义服务器变量来判断请求是否来自XMLHttpRequest。此方法简单实用,适用于各种Web开发场景。 ... [详细]
  • 探讨如何高效使用FastJSON进行JSON数据解析,特别是从复杂嵌套结构中提取特定字段值的方法。 ... [详细]
  • 导航栏样式练习:项目实例解析
    本文详细介绍了如何创建一个具有动态效果的导航栏,包括HTML、CSS和JavaScript代码的实现,并附有详细的说明和效果图。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 本文介绍了如何使用JQuery实现省市二级联动和表单验证。首先,通过change事件监听用户选择的省份,并动态加载对应的城市列表。其次,详细讲解了使用Validation插件进行表单验证的方法,包括内置规则、自定义规则及实时验证功能。 ... [详细]
author-avatar
dgh
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有