C#中读取XML文件的四种常用方法

2025-02-22 05:50

本文主要是介绍C#中读取XML文件的四种常用方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《C#中读取XML文件的四种常用方法》Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具,下面我们就来看看C#中读取XML文件的方法都有哪些吧...

XML

简介

Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具。XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,虽然XML占用的空间比二进制数据要占用更多的空间,但XML极其简单易于掌握和使用。

格式

实例:

文件名:test.xml

<?xml version="1.0" encoding="UTF-8"?>
<notes>
    <note Type="1">
      <to>Tove</to>
      <from>Jani</from>
      <heading>Reminder</heading>
      <body>Don't forget me this weekend!</body>
    </note>
    <note Type="2">
      <to>Tove</to>
      <from>Jani</from>
      <heading>Reminder</heading>
      <body>Don't forget me this weekend!</body>
    </note>
</notes>

c#读取XML文件方法

使用XmlDocument

使用XmlDocument是一种基于文档结构模型的方式来读取XML文件.在XML文件中,我们可以把XML看作是由文档声明(Declare),元素(Element),属性(Attribute),文本(Text)等构成的一个树.最开始的一个结点叫作根结点,每个结点都可以有自己的子结点.得到一个结点后,可以通过一系列属性或方法得到这个结点的值或其javascript它的一些属性.例如:

  •  xn 代表一个结点
  •  xn.Name;//这个结点的名称 
  •  xn.Value;//这个结点的值 
  •  xn.ChildNodes;//这个结点的所有子结点 
  •  xn.ParentNode;//这个结点的父结点 
  •  .......

操作

//声明XmlDocument对象,并加载XML文件
XmlDocument doc = new XmlDocument();
doc.Load(@"test.xml"); //此处为XML文件的路径

#region 获取节点
//得到根节点node
XmlNode xn = doc.SelectSingleNode("notes");
//得到根节点的所有子节点
XmlNodeList xnl = xn.ChildNodes;

foreach (XmlNode xNode in xnl)
{
    //将节点转换为元素,便于得到节点的属性值
    XmlElement xe = (XmlElement)xNode;
    //得到note节点的属性值
    striChina编程ng noteType = xe.GetAttribute("Type").ToString();
    //得到note节点的所有子节点
    XmlNodeList xnl0 = xe.ChildNodes;
    string body = xnl0.Item(3).InnerText;
    //修改节点值
    xnl0.Item(0).InnerText = "Tovv";
}
#endregion

#region 增加节点 -- 以下是追加
//创建一个节点,并设置节点的属性
XmlElement xelKey = doc.createElement_x("note");
XmlAttribute xelType = doc.CreateAttribute("Type");
xelType.InnerText = "3";
xelKey.SetAttributeNode(xelType);
//创建子节点
XmlElement xelAuthor = doc.createElement_x("to");
xelAuthor.InnerText = "Tang";
x编程elKey.AppendChild(xelAuthor);
//note,并保存整个文件
xn.AppendChild(xelKey);
doc.Save(@"..\..\Book.xml");
#endregion
    
#region 增加节点 -- 以下是覆盖
XmlDocument doc = new XmlDocument();
doc.LoadXml("<notes></notes>");//用这句话,会把以前的数据全部覆盖掉,只有你增加的数据
#endregion

#region 删除节点
XmlElement xe = xmlDoc.DocumentElement; 
string strPath = string.Format("/notes/notes[@Type=\"{0}\"]", dgvbookInfo.CurrentRow.Cells[1].Value.ToString());
XmlElement selectXe = (XmlElement)xe.SelectSingleNode(strPath); //selectSingleNode 根据XPath表达式,获得符合条件的第一个节点. 
selectXe.ParentNode.RemoveChild(selectXe); //移除节点
#endregion

注意

当XML文件中含有注释时,则会出错,因为注释也是一种结点类型,在没有特别说明的情况下,会默认它也是一个结点(Node).所以在把结点转换成元素的时候就会报错.“无法将类型为“System.Xml.XmlComment”的对象强制转换为类型“System.Xml.XmlElement”。”

解决方法:

XmlDocument xmlDoc = new XmlDocument();
XmlReaderSettings settings = new XmlReaderSettings();
settings.IgnoreComments = true;//忽略文档里面的注释 
XmlReader reader = XmlReader.Create(@"..\..\Book.xml", settings);
xmlDoc.Load(reader);

//最后读取完毕后,记得要关掉reader
reader.Close();

使用XmlTextReader/XmlTextWriter

使用XmlTextReader读取数据的时候,首先创建一个流,然后用read()方法来不断的向下读,根据读取的结点的类型来进行相应的操作.

操作

//使用XmlTextReader读文件
XmlTextReader reader = new XmlTextREADER(@"test.xml");

while(reader.Read())
{
    if(reader.NodeType == XmlNodeType.Element)
    {
        //读取节点属性
        if(reader.Name == "note")
        {
            //第一种方法
            string nodeType = reader.GetAttribute(0);
            
     http://www.chinasem.cn       //另一种方法
            for(int i = 0; i < reader.AttributeCount; i++)
            {
                reader.MoveToAttribute(i);
                string str = "属性:" + reader.Name + "=" + reader.Value;
            }
        }
        //读取节点的值
        if(reader.Name == "to")
        {
        	string nodeTo = reader.ReadElementString().Trim();    
        }
        if(reader.Name == "from")
        {
            string nodeFrom = reader.ReadElementString().Trim();
        }
        //当节点类型为尾节点时
        if(reader.NodeType == XmlNodeType.EndElement)
        {
            
        }
    }
}

reader.Close(); //关闭读文件流


//使用XmlTextWriter写文件
//XmlTextWriter写文件的时候,默认是覆盖以前的文件,如果此文件名不存在,它将创建此文件
XmlTextWriter myXmlTextWriter = new XmlTextWriter(@"testphp.xml", null);
//使用 Formatting 属性指定希望将 XML 设定为何种格式。 这样,子元素就可以通过使用 Indentation 和 IndentChar 属性来缩进。 
myXmlTextWriter.Formatting = Formatting.Indented;

myXmlTextWriter.WriteStartDocument(false);
myXmlTextWriter.WriteStartElement("notes"); //写入notes的起始节点

myXmlTextWriter.WriteComment("note information"); //写入注释
myXmlTextWriter.WriteStartElement("note"); //写入note的起始节点

myXmlTextWriter.WriteAttributeString("Type", "3"); //写入note节点的属性

myXmlTextWriter.WriteElementString("to","hong"); //写入note子节点

myXmlTextWriter.WriteEndElement(); //写入note的尾节点
myXmlTextWriter.WriteEndElement(); //写入notes的尾节点

myXmlTextWriter.Flush(); //结束写入
myXmlTextWriter.Close(); //关闭写入流

使用Linq to Xml

Linq是C#3.0中出现的一个新特性,使用它可以方便的操作许多数据源,也包括XML文件.使用Linq操作XML文件非常的方便,而且也比较简单

操作

XElement xe = XElement.Load(@"test.xml");

#region 读取数据
IEnumerable<XElement> elements = from ele in xe.Elements("note") select ele;

foreach(var ele in elements)
{
    //获取节点的属性
	string nodeType = ele.Attribute("Type").Value;
    //获取节点的子节点值
    string nodeTo = ele.Element("to").Value;
}
#endregion

#region 插入数据
XElement record = new XElement(
	new XElement("note",
                 new XAttribute("Type", "3"),
                 new XElement("to", "tang"),
                 new XElmeent("from", "hong")
                )
);
xe.Add(record);
xe.Save(@"test.xml");
#endregion
    
#region 删除数据
//删除选中的数据
IEnumerable<XElement> elements = from ele in xe.Elements("note")
    where (string)ele.Attribute("Type") == 1
    select ele;

if(elements.Count() > 0)
    elements.First().Remove();

xe.Save(@"test.xml");

//删除所有的数据
IEnumerable<XElement> elements = from ele in xe.Elements("note") select ele;

if(elements.Count() > 0)
    elements.Remove();

xe.Save(@"test.xml");
#endregion

#region 修改数据
IEnumerable<XElement> elements = from ele in xe.Elements("note")
    where (string)ele.Attribute("Type") == 1
    select ele;

if(elements.Count() > 0)
{
    XElement first = elements.First();
    //设置新的属性
    first.SetAttributeValue("Type", 5);
    //替换新的节点
    first.ReplaceNodes(
        new XElement("to", "tangtang"),
        new XElmeent("from", "hong")
    );
}
xe.Save(@"test.xml");
#endregion

使用DataSet

ADO.NET对XML提供了强大的支持,其主要事通过数据集与XML进行交互。

操作

DataSet ds = new DataSet();
//读取文件
ds.ReadXml(@"test.xml");

//显示数据
string nodeTo = ds.Tables[0].Rows[0]["to"];
//修改数据
ds.Talbes[0].Rows[0]["to"] = "tos";
//插入数据
DataRow dr = ds.Tables[0].NewRow();
dr["to"] = "dsds";
dr["from"] = "wang";
ds.Tables[0].Rows.Add(dr);
//删除数据
DataRow delR = ds.Tables[0].Rows[0];
ds.Tables[0].Rows.Remove(delR);

//保存数据
ds.WriteXml(@"test.xml");

到此这篇关于C#中读取XML文件的四种常用方法的文章就介绍到这了,更多相关C#读取XML内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程China编程(www.chinasem.cn)!

这篇关于C#中读取XML文件的四种常用方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1153499

相关文章

Python中的魔术方法__new__详解

《Python中的魔术方法__new__详解》:本文主要介绍Python中的魔术方法__new__的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、核心意义与机制1.1 构造过程原理1.2 与 __init__ 对比二、核心功能解析2.1 核心能力2.2

Python Transformer 库安装配置及使用方法

《PythonTransformer库安装配置及使用方法》HuggingFaceTransformers是自然语言处理(NLP)领域最流行的开源库之一,支持基于Transformer架构的预训练模... 目录python 中的 Transformer 库及使用方法一、库的概述二、安装与配置三、基础使用:Pi

关于pandas的read_csv方法使用解读

《关于pandas的read_csv方法使用解读》:本文主要介绍关于pandas的read_csv方法使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录pandas的read_csv方法解读read_csv中的参数基本参数通用解析参数空值处理相关参数时间处理相关

前端下载文件时如何后端返回的文件流一些常见方法

《前端下载文件时如何后端返回的文件流一些常见方法》:本文主要介绍前端下载文件时如何后端返回的文件流一些常见方法,包括使用Blob和URL.createObjectURL创建下载链接,以及处理带有C... 目录1. 使用 Blob 和 URL.createObjectURL 创建下载链接例子:使用 Blob

Java中使用Hutool进行AES加密解密的方法举例

《Java中使用Hutool进行AES加密解密的方法举例》AES是一种对称加密,所谓对称加密就是加密与解密使用的秘钥是一个,下面:本文主要介绍Java中使用Hutool进行AES加密解密的相关资料... 目录前言一、Hutool简介与引入1.1 Hutool简介1.2 引入Hutool二、AES加密解密基础

使用Python将JSON,XML和YAML数据写入Excel文件

《使用Python将JSON,XML和YAML数据写入Excel文件》JSON、XML和YAML作为主流结构化数据格式,因其层次化表达能力和跨平台兼容性,已成为系统间数据交换的通用载体,本文将介绍如何... 目录如何使用python写入数据到Excel工作表用Python导入jsON数据到Excel工作表用

Pytest多环境切换的常见方法介绍

《Pytest多环境切换的常见方法介绍》Pytest作为自动化测试的主力框架,如何实现本地、测试、预发、生产环境的灵活切换,本文总结了通过pytest框架实现自由环境切换的几种方法,大家可以根据需要进... 目录1.pytest-base-url2.hooks函数3.yml和fixture结论你是否也遇到过

鸿蒙中Axios数据请求的封装和配置方法

《鸿蒙中Axios数据请求的封装和配置方法》:本文主要介绍鸿蒙中Axios数据请求的封装和配置方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.配置权限 应用级权限和系统级权限2.配置网络请求的代码3.下载在Entry中 下载AxIOS4.封装Htt

Redis实现延迟任务的三种方法详解

《Redis实现延迟任务的三种方法详解》延迟任务(DelayedTask)是指在未来的某个时间点,执行相应的任务,本文为大家整理了三种常见的实现方法,感兴趣的小伙伴可以参考一下... 目录1.前言2.Redis如何实现延迟任务3.代码实现3.1. 过期键通知事件实现3.2. 使用ZSet实现延迟任务3.3

idea maven编译报错Java heap space的解决方法

《ideamaven编译报错Javaheapspace的解决方法》这篇文章主要为大家详细介绍了ideamaven编译报错Javaheapspace的相关解决方法,文中的示例代码讲解详细,感兴趣的... 目录1.增加 Maven 编译的堆内存2. 增加 IntelliJ IDEA 的堆内存3. 优化 Mave