XMLElement,XMLDocument 用法「建议收藏」

XMLElement,XMLDocument 用法「建议收藏」来源http://www.cr173.com/html/23515_1.html一前言先来了解下操作XML所涉及到的几个类及之间的关系 如果大家发现少写了一些常用的方法,麻烦在评论中指出,我一定会补上的!谢谢大家*1XMLElement主要是针对节点的一些属性进行操作*2XMLDocument主要是针对节点的CUID操作*3XMLNode为抽象

大家好,又见面了,我是你们的朋友全栈君。

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

一 前言

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

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

XMLElement,XMLDocument 用法「建议收藏」

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

二 具体操作

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

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

 1         public void CreatXmlTree(string xmlPath) 2         { 3             XElement xElement = new XElement( 4                 new XElement("BookStore", 5                     new XElement("Book", 6                         new XElement("Name", "C#入门", new XAttribute("BookName", "C#")), 7                         new XElement("Author", "Martin", new XAttribute("Name", "Martin")), 8                         new XElement("Adress", "上海"), 9                         new XElement("Date", DateTime.Now.ToString("yyyy-MM-dd"))10                         ),11                     new XElement("Book",12                         new XElement("Name", "WCF入门", new XAttribute("BookName", "WCF")),13                         new XElement("Author", "Mary", new XAttribute("Name", "Mary")),14                         new XElement("Adress", "北京"),15                         new XElement("Date", DateTime.Now.ToString("yyyy-MM-dd"))16                         )17                         )18                 );19 20             //需要指定编码格式,否则在读取时会抛:根级别上的数据无效。 第 1 行 位置 1异常21             XmlWriterSettings settings = new XmlWriterSettings();22             settings.Encoding = new UTF8Encoding(false);23             settings.Indent = true;24             XmlWriter xw = XmlWriter.Create(xmlPath,settings);25             xElement.Save(xw);26             //写入文件27             xw.Flush();28             xw.Close();29         }

然后得到如下的XML树

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <BookStore>
 3     <Book>
 4         <Name BookName="C#">C#入门</Name>
 5         <Author Name="Martin">Martin</Author>
 6         <Date>2013-10-11</Date>
 7         <Adress>上海</Adress>
 8         <Date>2013-10-11</Date>
 9     </Book>
10     <Book>
11         <Name BookName="WCF">WCF入门</Name>
12         <Author Name="Mary">Mary</Author>
13         <Adress>北京</Adress>
14         <Date>2013-10-11</Date>
15     </Book>
16 </BookStore>

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

2.1 新增节点与属性

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

1         public void Create(string xmlPath) 2         { 3             XmlDocument xmlDoc = new XmlDocument(); 4             xmlDoc.Load(xmlPath); 5              6             var root = xmlDoc.DocumentElement;//取到根结点 7             XmlNode newNode = xmlDoc.CreateNode("element", "NewBook", ""); 8             newNode.InnerText = "WPF"; 9 10             //添加为根元素的第一层子结点11             root.AppendChild(newNode);12             xmlDoc.Save(xmlPath);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         }

效果如下

XMLElement,XMLDocument 用法「建议收藏」

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         }

效果如下

XMLElement,XMLDocument 用法「建议收藏」

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> 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         }

四 总结

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/150754.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • spdlog linux编译出错,【C++】spdlog–log4cxx有点笨重,试一试spdlog

    spdlog linux编译出错,【C++】spdlog–log4cxx有点笨重,试一试spdlogspdlog是什么linuxFastC++logginglibrary按照官方介绍,是一个高性能的C++日志组件,支持跨平台,兼容C++11。原来项目中使用的是log4cxx,我感受稍微有点笨重,而且好久没有更新了。ios在新项目中,我只须要一款轻量级的日志组件,能:git存文件按照天数切分快速的浏览了spdlog,知足个人需求,因而开搞!githubspdlog快速入门如下内容来自spd…

    2022年6月23日
    51
  • Python 学习记录(五)Pycharm导入包

    Python 学习记录(五)Pycharm导入包Pycharm社区版2021.1.2社区版导入包1.路径File菜单下的Settings……菜单打开菜单如下:Appearance是界面风格设置,这默认是Darcula,灰色主色调。2.添加引用包点击左边的Project:PythonProject项目,默认名称是这个。点击加号,弹出新窗口:输入需要导入的包,比如Numpy:里面具有很多包含这个名字的包,选择numpy包,点击InstallPackage按钮,开始安装。安装完整之后左下角有一个状态

    2022年8月28日
    2
  • 常用图像处理算法()[通俗易懂]

    常用图像处理算法()[通俗易懂]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&a

    2022年5月13日
    39
  • 洗水管理系统_洗衣店信息管理系统课设

    洗水管理系统_洗衣店信息管理系统课设技术:Java、JSP等摘要:随着人们对生活物质的追求,人们对穿着有了更加深刻的体会以及认识,很多高档的服装可以给人们带来气质方面的展现和心情的愉悦。然后,对于高档服装的清洗也成为了实际性的问题,为此很多人们选择送去洗衣店去清洗,其目的是既清洗的干净,而且还方便。这就给洗衣店带来非常大的管理压力,尤其是记录用户的收费信息等。本次系统设计之初就考虑到这一点来进行需求调查的,系统主要的模块由用户登录模块,注册模块,办卡管理,充值管理,寄存衣服办理,报表统计管理等基本实现功能模块,系统主要采取的是B/S开发模式

    2025年6月18日
    3
  • IDEA创建javaweb项目过程[通俗易懂]

    IDEA创建javaweb项目过程[通俗易懂]注意不能用社区版的idea哦,只能用企业版的创建方式有两种第一种是手动创建第二种是使用idea自带的maven骨架创建其实二者差别不大,所以这里只介绍第一种,让我们来试试吧~创建web项目首先新建一个文件夹,等下我们新建的项目就放在这个文件夹里我们给它取名test_maven(但其实并不是用maven创建)File->New->Module选择maven,注意不勾选create选项,然后next起名字,Finish然后就基本创建好啦,但是这里我们还缺少web的配置文

    2025年11月13日
    6
  • 开销是有益的:AppCan 至HTML5移动创新和创业精神和健康

    开销是有益的:AppCan 至HTML5移动创新和创业精神和健康

    2022年1月4日
    52

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号