C# - Xml的操作
2021/5/20 20:59:01
本文主要是介绍C# - Xml的操作,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Xml Xml文件【library.xml】<?xml version="1.0" encoding="utf-8" ?> <!-- 图书馆 --> <library Name="北京首都图书馆"> <bookstore> <!--记录书本的信息--> <book Type="必修课" ISBN="7-111-19149-2"> <title>数据结构</title> <author>严蔚敏</author> <price>30.00</price> </book> <book Type="必修课" ISBN="7-111-19149-3"> <title>路由型与交换型互联网基础</title> <author>程庆梅</author> <price>27.00</price> </book> <book Type="必修课" ISBN="7-111-19149-4"> <title>计算机硬件技术基础</title> <author>李继灿</author> <price>25.00</price> </book> <book Type="必修课" ISBN="7-111-19149-5"> <title>软件质量保证与管理</title> <author>朱少民</author> <price>39.00</price> </book> <book Type="必修课" ISBN="7-111-19149-6"> <title>算法设计与分析</title> <author>王红梅</author> <price>23.00</price> </book> <book Type="选修课" ISBN="7-111-19149-1"> <title>计算机操作系统</title> <author>7-111-19149-1</author> <price>28</price> </book> </bookstore> </library>实体类【BookInfo.cs】
namespace XmlStudy.Model { public class BookInfo { /// <summary> /// 所对应的课程类型 /// </summary> public string BookType { get; set; } /// <summary> /// 书所对应的ISBN号 /// </summary> public string BookISBN { get; set; } /// <summary> /// 书名 /// </summary> public string BookName { get; set; } /// <summary> /// 作者 /// </summary> public string BookAuthor { get; set; } /// <summary> /// 价格 /// </summary> public double BookPrice { get; set; } } }XmlDocument
使用XmlDocument是一种基于文档结构模型的方式来读取XML文件.在XML文件中,我们可以把XML看作是由文档声明(Declare),元素(Element),属性(Attribute),文本(Text)等构成的一个树.最开始的一个结点叫作根结点,每个结点都可以有自己的子结点.得到一个结点后,可以通过一系列属性或方法得到这个结点的值或其它的一些属性.例如:
xn 代表一个结点 xn.Name;//这个结点的名称 xn.Value;//这个结点的值 xn.ChildNodes;//这个结点的所有子结点 xn.ParentNode;//这个结点的父结点
整体案例:
using Newtonsoft.Json; using System; using System.IO; using System.Xml; using XmlStudy.Model; namespace XmlStudy { class Program { static void Main(string[] args) { XmlDocument xmlDoc = new XmlDocument(); XmlReaderSettings settings = new XmlReaderSettings { IgnoreComments = true//忽略文档里面的注释 }; string path = Directory.GetCurrentDirectory(); XmlReader xmlReader = XmlReader.Create(path + "\\XmlFile\\library.xml", settings); xmlDoc.Load(xmlReader); xmlReader.Close(); //得到根节点 XmlNode libraryNode = xmlDoc.SelectSingleNode("library");//参数区分大小写,没有此节点时返回null //获取属性值 XmlElement libraryElement = (XmlElement)libraryNode; Console.WriteLine(libraryElement.GetAttribute("Name"));//参数区分大小写,没有此节点时返回null //得到bookstore节点 XmlNode bookStoreNode = xmlDoc.SelectSingleNode("/library/bookstore"); XmlNodeList bookNodeList = bookStoreNode.ChildNodes; foreach (XmlNode bookNode in bookNodeList) { BookInfo bookInfo = new BookInfo(); XmlElement bookElement = (XmlElement)bookNode; bookInfo.BookType = bookElement.GetAttribute("Type"); bookInfo.BookISBN = bookElement.GetAttribute("ISBN"); bookInfo.BookName = bookNode.SelectSingleNode("title").InnerText;//没有此节点,InnerText属性会异常 bookInfo.BookAuthor = bookNode.SelectSingleNode("author").InnerText; bookInfo.BookPrice = Convert.ToDouble(bookNode.SelectSingleNode("price").InnerText); Console.WriteLine(JsonConvert.SerializeObject(bookInfo)); } //新加一个节点 XmlElement newBookNode = xmlDoc.CreateElement("book"); //设置节点属性 XmlAttribute newType = xmlDoc.CreateAttribute("Type"); newType.InnerText = "新加类型"; newBookNode.SetAttributeNode(newType); //添加子节点 XmlElement titleElement = xmlDoc.CreateElement("title"); titleElement.InnerText = "新加书籍"; newBookNode.AppendChild(titleElement); bookStoreNode.AppendChild(newBookNode); xmlDoc.Save(path + "\\XmlFile\\library.xml"); //删除一个节点 string strPath = string.Format("/library/bookstore/book[@ISBN=\"{0}\"]", "7-111-19149-4"); XmlElement selectDeleteXe = (XmlElement)xmlDoc.SelectSingleNode(strPath); //SelectSingleNode 根据XPath表达式,获得符合条件的第一个节点. selectDeleteXe.ParentNode.RemoveChild(selectDeleteXe); xmlDoc.Save(path + "\\XmlFile\\library.xml"); //修改数据 strPath = string.Format("/library/bookstore/book[@ISBN=\"{0}\"]", "7-111-19149-3"); XmlElement selectUpdateXe = (XmlElement)xmlDoc.SelectSingleNode(strPath); selectUpdateXe.SetAttribute("Type", "修改");//也可以通过SetAttribute来增加一个属性 selectUpdateXe.GetElementsByTagName("title").Item(0).InnerText = "修改标题"; selectUpdateXe.GetElementsByTagName("author").Item(0).InnerText = "修改作者"; selectUpdateXe.GetElementsByTagName("price").Item(0).InnerText = "100.0"; xmlDoc.Save(path + "\\XmlFile\\library.xml"); } } }使用XmlDocument - Read / Write / Delete / Update 加载xml文件
XmlDocument xmlDoc = new XmlDocument(); XmlReaderSettings settings = new XmlReaderSettings { IgnoreComments = true//忽略文档里面的注释 }; string path = Directory.GetCurrentDirectory(); XmlReader xmlReader = XmlReader.Create(path + "\\XmlFile\\library.xml", settings); xmlDoc.Load(xmlReader); xmlReader.Close();加载xml字符串
string plan = @"Xml字符串"; XmlDocument xml = new XmlDocument(); xml.LoadXml(plan);读取
//得到根节点 XmlNode libraryNode = xmlDoc.SelectSingleNode("library");//参数区分大小写,没有此节点时返回null //获取属性值 XmlElement libraryElement = (XmlElement)libraryNode; Console.WriteLine(libraryElement.GetAttribute("Name"));//参数区分大小写,没有此节点时返回null //得到bookstore节点 XmlNode bookStoreNode = xmlDoc.SelectSingleNode("/library/bookstore"); XmlNodeList bookNodeList = bookStoreNode.ChildNodes; foreach (XmlNode bookNode in bookNodeList) { BookInfo bookInfo = new BookInfo(); XmlElement bookElement = (XmlElement)bookNode; bookInfo.BookType = bookElement.GetAttribute("Type"); bookInfo.BookISBN = bookElement.GetAttribute("ISBN"); bookInfo.BookName = bookNode.SelectSingleNode("title").InnerText;//没有此节点,InnerText属性会异常 bookInfo.BookAuthor = bookNode.SelectSingleNode("author").InnerText; bookInfo.BookPrice = Convert.ToDouble(bookNode.SelectSingleNode("price").InnerText); Console.WriteLine(JsonConvert.SerializeObject(bookInfo)); }添加
//新加一个节点 XmlElement newBookNode = xmlDoc.CreateElement("book"); //设置节点属性 XmlAttribute newType = xmlDoc.CreateAttribute("Type"); newType.InnerText = "新加类型"; newBookNode.SetAttributeNode(newType); //添加子节点 XmlElement titleElement = xmlDoc.CreateElement("title"); titleElement.InnerText = "新加书籍"; newBookNode.AppendChild(titleElement); bookStoreNode.AppendChild(newBookNode); xmlDoc.Save(path + "\\XmlFile\\library.xml");修改
//修改数据 strPath = string.Format("/library/bookstore/book[@ISBN=\"{0}\"]", "7-111-19149-3"); XmlElement selectUpdateXe = (XmlElement)xmlDoc.SelectSingleNode(strPath); selectUpdateXe.SetAttribute("Type", "修改");//也可以通过SetAttribute来增加一个属性 selectUpdateXe.GetElementsByTagName("title").Item(0).InnerText = "修改标题"; selectUpdateXe.GetElementsByTagName("author").Item(0).InnerText = "修改作者"; selectUpdateXe.GetElementsByTagName("price").Item(0).InnerText = "100.0"; xmlDoc.Save(path + "\\XmlFile\\library.xml");删除
//删除一个节点 string strPath = string.Format("/library/bookstore/book[@ISBN=\"{0}\"]", "7-111-19149-4"); XmlElement selectDeleteXe = (XmlElement)xmlDoc.SelectSingleNode(strPath); //SelectSingleNode 根据XPath表达式,获得符合条件的第一个节点. selectDeleteXe.ParentNode.RemoveChild(selectDeleteXe); xmlDoc.Save(path + "\\XmlFile\\library.xml");XmlDocument - XmlHelper XmlHelper
使用
这篇关于C# - Xml的操作的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-03-01沐雪多租宝商城源码从.NetCore3.1升级到.Net6的步骤
- 2024-12-06使用Microsoft.Extensions.AI在.NET中生成嵌入向量
- 2024-11-18微软研究:RAG系统的四个层次提升理解与回答能力
- 2024-11-15C#中怎么从PEM格式的证书中提取公钥?-icode9专业技术文章分享
- 2024-11-14云架构设计——如何用diagrams.net绘制专业的AWS架构图?
- 2024-05-08首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
- 2024-03-30C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
- 2024-03-29c# datetime tryparse
- 2024-02-21list find index c#
- 2024-01-24convert toint32 c#