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安装Pandas库的两种方法

《Python安装Pandas库的两种方法》本文介绍了三种安装PythonPandas库的方法,通过cmd命令行安装并解决版本冲突,手动下载whl文件安装,更换国内镜像源加速下载,最后建议用pipli... 目录方法一:cmd命令行执行pip install pandas方法二:找到pandas下载库,然后

MySQL常用字符串函数示例和场景介绍

《MySQL常用字符串函数示例和场景介绍》MySQL提供了丰富的字符串函数帮助我们高效地对字符串进行处理、转换和分析,本文我将全面且深入地介绍MySQL常用的字符串函数,并结合具体示例和场景,帮你熟练... 目录一、字符串函数概述1.1 字符串函数的作用1.2 字符串函数分类二、字符串长度与统计函数2.1

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

MySQL 内存使用率常用分析语句

《MySQL内存使用率常用分析语句》用户整理了MySQL内存占用过高的分析方法,涵盖操作系统层确认及数据库层bufferpool、内存模块差值、线程状态、performance_schema性能数据... 目录一、 OS层二、 DB层1. 全局情况2. 内存占js用详情最近连续遇到mysql内存占用过高导致

解决pandas无法读取csv文件数据的问题

《解决pandas无法读取csv文件数据的问题》本文讲述作者用Pandas读取CSV文件时因参数设置不当导致数据错位,通过调整delimiter和on_bad_lines参数最终解决问题,并强调正确参... 目录一、前言二、问题复现1. 问题2. 通过 on_bad_lines=‘warn’ 跳过异常数据3

C#中lock关键字的使用小结

《C#中lock关键字的使用小结》在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时,其他线程无法访问同一实例的该代码块,下面就来介绍一下lock关键字的使用... 目录使用方式工作原理注意事项示例代码为什么不能lock值类型在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时

C# $字符串插值的使用

《C#$字符串插值的使用》本文介绍了C#中的字符串插值功能,详细介绍了使用$符号的实现方式,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录$ 字符使用方式创建内插字符串包含不同的数据类型控制内插表达式的格式控制内插表达式的对齐方式内插表达式中使用转义序列内插表达式中使用

C#中的Converter的具体应用

《C#中的Converter的具体应用》C#中的Converter提供了一种灵活的类型转换机制,本文详细介绍了Converter的基本概念、使用场景,具有一定的参考价值,感兴趣的可以了解一下... 目录Converter的基本概念1. Converter委托2. 使用场景布尔型转换示例示例1:简单的字符串到

Python获取浏览器Cookies的四种方式小结

《Python获取浏览器Cookies的四种方式小结》在进行Web应用程序测试和开发时,获取浏览器Cookies是一项重要任务,本文我们介绍四种用Python获取浏览器Cookies的方式,具有一定的... 目录什么是 Cookie?1.使用Selenium库获取浏览器Cookies2.使用浏览器开发者工具

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方