返回顶部
首页 > 资讯 > 精选 >C#如何使⽤XmlReader和XmlWriter操作XML⽂件
  • 498
分享到

C#如何使⽤XmlReader和XmlWriter操作XML⽂件

2023-06-30 18:06:30 498人浏览 独家记忆
摘要

本文小编为大家详细介绍“C#如何使⽤XmlReader和XmlWriter操作XML⽂件”,内容详细,步骤清晰,细节处理妥当,希望这篇“C#如何使⽤XmlReader和XmlWriter操作XML⽂件”文章能帮助大家解决疑惑,下面跟着小编的

本文小编为大家详细介绍“C#如何使⽤XmlReader和XmlWriter操作XML⽂件”,内容详细,步骤清晰,细节处理妥当,希望这篇“C#如何使⽤XmlReader和XmlWriter操作XML⽂件”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

一、概述

XMLReader为抽象类,其派生类有:

  • XmlDictionaryReader

  • XmlNodeReader

  • XmlTextReader(与io命名空间中的TextReader对象一起使用)、

  • XmlValidatingReader(添加了DTD和模式验证,提供数据的有效性验证)。

•XmlReader reader =new XmlTextReader(xmlFile);•XmlReader reader =new XmlnodeReader(xmNode);

XMLWriter为抽象类,其派生类有

  • XmlTextWriter

  • XmlQueryWriter

二、XmlReader

1、概述

XmlDocument和XElement在读取Xml时要将整个Xml文档放到内存中去操作,这样做操作简单,但是很费内存。而在有些场景下我们必须考虑尽可能节省内存,这时候就该XmlReaderXmlWriter出场了。

XmlReader非常类似于SAX。它们最大的区别是SAX是一种推模型(所有XML数据都必须由应用程序处理,无论是否需要这些数据),XmlReader是一种拉模型(如果不需要所有的数据,就不需要处理它们)。

XmlReader读取Xml需要通过Read()实例方法,不断读取Xml文档中的声明,节点开始,节点内容,节点结束,以及空白等等,直到文档结束Read()方法返回false。

2、常见用法

(1)使用静态方法Create(),返回一个XmlReader对象。

(2)Read()方法可以进入下一个节点。XmlReader类还可以读取强类型化的数据,它有几个ReadValuesAs方法,如、ReadValueAsDouble、ReadValueAsBoolean等。

(3)获取属性数据:AttributeCountry属性确定属性个数。GetAttribute()方法按照名称或索引来获取属性,如果要一次迭代一个属性就可以使用MoveToFirstAttribute()和MoveToNextAttribute()方法。

XmlReader tr = XmlReader.Create("book.xml");while (tr.Read()){if (tr.NodeType == XmlNodeType.Element){   for (int i = 0; i < tr.AttributeCount; i++){     richTextBox1.AppendText(tr.GetAttribute(i)+"\r\n");     }   }}

3、使用XmlReader类进行验证

有时不但要知道文档的格式是规范的,还是确定文档是有效的。

XmlReader可以使用XmlReaderSettings,根据XSD模式验证XML。

XSD模式添加到XMLSchemaSet中,通过Schema属性可以访问XMLSchemaSet。XsdValidate属性还必须设置为ture,这个属性默认为flase.

XmlReaderSettings settings = new XmlReaderSettings();settings.IgnoreComments = true;settings.IgnoreWhitespace = true;XmlReader reader = XmlReader.Create("Customer2.xml", settings);//settings参数 为可选。List lists = new List();CustomerInfo cust = null;while (reader.Read())//读取下一个节点{    if (reader.NodeType == XmlNodeType.Element)    {        switch (reader.Name)        {            case "row":                cust = new CustomerInfo();                if (reader.HasAttributes)//因属性不是文档结构的一部分,要专门检查。属性HasValue是否有值;IsEmptyElement:是否为空元素                {                    cust.AppId = reader.GetAttribute("AppID");                    cust.Version = reader.GetAttribute("Version");                }                break;            case "CustomerID":                cust.CustomerID = reader.ReadString();                break;            case "CompanyName":                cust.CompanyName = reader.ReadString();                break;            default:                break;        }    }}

4、读取字节数据BinHex

下面的示例读取一个内联 BinHex 编码图像。 BinHex 数据嵌入到 元素中。 BinaryWriter 用于创建一个新的二进制数据文件。

public static void BinHexDecodeImageFile() {  byte[] buffer = new byte[1000];  int readBytes = 0;  using (XmlReader reader = XmlReader.Create("output.xml")) {                               FileStream outputFile = new FileStream(@"C:\artFiles\data\newImage.jpg", FileMode.OpenOrCreate, FileAccess.Write, FileShare.Write);        // Read to the image element.        reader.ReadToFollowing("image");        // Read the BinHex data.        Console.WriteLine("\r\nReading BinHex...");        BinaryWriter bw = new BinaryWriter(outputFile);        while ((readBytes = reader.ReadElementContentAsBinHex(buffer, 0, 50))>0)         {            bw.Write(buffer, 0, readBytes);        }        outputFile.Close();          }}

三 、XmlWriter

1、概述

与XmlReader一样,XmlWriter类以只向前、未缓存的方式 进行写入。

2、常见用法

1、写Xml文档声明

WriteStartDocument方法可以接受一个bool参数(表示standalone,是否为独立文档)或者不指定参数standalone保持默认值

xmlWriter.WriteStartDocument(false|true);

注意在使用WriteStartDocument方法后最好调用xmlWrite.WriteEndDocument()方法来关闭所有可能未关闭标签

2、写xml节点以及属性

//写节点xmlWriter.WriteStartElement("cat");//给节点添加属性xmlWriter.WriteAttributeString("color", "white");//给节点内部添加文本xmlWriter.WriteString("I'm a cat");xmlWriter.WriteEndElement(); //或者通过WriteElementString(string,string)方法写xml节点同时写下节点值,如下xmlWriter.WriteElementString("pig", "pig is great");

3、写CData

xmlWriter.WriteCData("<strong>dog is dog</strong>");

4、如添加注释

xmlWriter.WriteComment("*** ");

5、如何设置XmlWriter的输出格式,解决输出UTF-16问题

设置xml输出格式,需要通过XmlWriterSettings类,如下代码

XmlWriterSettings settings = new XmlWriterSettings();//要求缩进settings.Indent = true;//注意如果不设置encoding默认将输出utf-16 //注意这儿不能直接用Encoding.UTF8如果用Encoding.UTF8将在输出文本的最前面添加4个字节的非xml内容settings.Encoding = new UTF8Encoding(false); //设置换行符settings.NewLineChars = Environment.NewLine;

6、写入其他对象中

XmlWriter类可以把Xml写入一个流、文件、StringBuilder、TextWriter或另一个XmlWriter对象中。

7、命名空间的支持

XmlTextWriter w = new XmlTextWriter(Console.Out);w.WriteStartElement("x","root","urn:1");w.WriteStartElement("y","item","urn:1");w.WriteAttributeString("abc","urn:1","xyz");w.WriteEndElement();w.WriteEndElement();w.Close();

3、XmlWriter完整的代码示例

XmlWriterSettings settings = new XmlWriterSettings();settings.Indent = true;settings.IndentChars = "\t";settings.NewLineOnAttributes = false;settings.ConfORManceLevel = ConformanceLevel.Auto;settings.OmitXmlDeclaration = false;//注意如果不设置encoding默认将输出utf-16//注意这儿不能直接用Encoding.UTF8如果用Encoding.UTF8将在输出文本的最前面添加4个字节的非xml内容settings.Encoding = new UTF8Encoding(false);//设置换行符settings.NewLineChars = Environment.NewLine;XmlWriter writer = XmlWriter.Create("CustomerNewElementArribute.xml", settings);//settings参数 为可选。//使用xmlwriter写入StringBuiler和Stream://StringBuilder builder = new StringBuilder();//XmlWriter writer = XmlWriter.Create(builder, settings);//MemoryStream stream = new MemoryStream();//XmlWriter writer = XmlWriter.Create(stream, settings);writer.WriteStartDocument();//写Xml声明:可选参数表示standalone,是否为独立文档writer.WriteComment("XXX"); //写注释writer.WriteStartElement("Table");//写复杂元素(元素含有子元素)for (int i = 1; i < 10; i++){    writer.WriteStartElement("row");    writer.WriteAttributeString("Version", "2.0");    writer.WriteAttributeString("AppID", "111");    writer.WriteElementString("CustomerID", "cmz" + i.ToString());//写简单元素    writer.WriteElementString("CompanyName", "程沐喆" + i.ToString());    writer.WriteEndElement();}writer.WriteEndElement();writer.WriteEndDocument();writer.Flush();writer.Close();

4、写入字节数据BinHex

//用 WriteBinHex 方法编写 BinHex 数据。 BinHex 数据嵌入在  元素。int bufferSize = 1000;byte[] buffer = new byte[bufferSize];int readBytes = 0;using (XmlWriter writer = XmlWriter.Create("output.xml")){    FileStream inputFile = new FileStream(@"C:\sunset.jpg", FileMode.OpenOrCreate,FileAccess.Read, FileShare.Read);    writer.WriteStartDocument();    writer.WriteStartElement("image");    BinaryReader br = new BinaryReader(inputFile);    Console.WriteLine("\r\nWriting BinHex data...");    do    {        readBytes = br.Read(buffer, 0, bufferSize);        writer.WriteBinHex(buffer, 0, readBytes);    } while (bufferSize <= readBytes);    br.Close();    writer.WriteEndElement();//    writer.WriteEndDocument();}

读到这里,这篇“C#如何使⽤XmlReader和XmlWriter操作XML⽂件”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网精选频道。

--结束END--

本文标题: C#如何使⽤XmlReader和XmlWriter操作XML⽂件

本文链接: https://lsjlt.com/news/330862.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C#使⽤XmlReader和XmlWriter操作XML⽂件
    一、概述 1、XMLReader为抽象类,其派生类有: XmlDictionaryReaderXmlNodeReaderXmlTextReader(与IO命名空间中的TextRead...
    99+
    2024-04-02
  • C#如何使⽤XmlReader和XmlWriter操作XML⽂件
    本文小编为大家详细介绍“C#如何使⽤XmlReader和XmlWriter操作XML⽂件”,内容详细,步骤清晰,细节处理妥当,希望这篇“C#如何使⽤XmlReader和XmlWriter操作XML⽂件”文章能帮助大家解决疑惑,下面跟着小编的...
    99+
    2023-06-30
  • C#.NET如何操作XML
    小编给大家分享一下C#.NET如何操作XML,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!如何让C#.NET操作XML?需要添加的命名空间:using System.Xml;要完成C#.NET操作XML,首先定义...
    99+
    2023-06-18
  • java 如何使用org.w3c.dom操作XML文件
    本篇介绍在java中,如何使用org.w3c.dom中的相关内容来操作XML文件。包括: 如何在内存中构建XML文件并写入磁盘; 如何从磁盘读取XML文件到内存; ...
    99+
    2024-04-02
  • Python如何操作XML文件
    这篇文章主要介绍“Python如何操作XML文件”,在日常操作中,相信很多人在Python如何操作XML文件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python如何操作XML文件”的疑惑有所帮助!接下来...
    99+
    2023-06-30
  • C#XML文件操作之相机参数保存和读取
    目录1. XML基础2. XML基本操作3. 相机参数保存和读取1. XML基础 XML是可扩展标记语言(Extensible Markup Language,XML)是一种数据语言...
    99+
    2022-11-13
    C#相机参数保存 读取 C# 参数保存 读取 C# xml文件
  • C#开发中如何使用文件和目录操作
    C#开发中如何使用文件和目录操作,需要具体代码示例在C#开发中,文件和目录操作是非常常见和重要的一部分。我们经常需要读取文件、写入文件、创建目录、删除目录等各种操作。下面我们将具体介绍如何在C#中进行文件和目录操作,并给出相应的代码示例。读...
    99+
    2023-10-22
    C#文件操作 C#目录操作 C#文件和目录操作
  • 如何使用C++进行文件操作?
    如何使用C++进行文件操作文件操作是编程中非常重要的一部分。在C++中,我们可以利用文件操作来读取和写入文件,以对文件进行处理和管理。本文将介绍如何使用C++进行文件操作的基本知识和常用函数。C++提供了一个fstream库,它包含了各种用...
    99+
    2023-11-02
    C++ 文件操作 使用。
  • C# 中如何使用Delphi控件操作Excel文件
    这篇文章给大家介绍C# 中如何使用Delphi控件操作Excel文件,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。C# 操作Excel之Delphi控件方法在Form中分别放入ExcelApplication,Exce...
    99+
    2023-06-17
  • 如何使用C++中的文件操作函数?
    C++是一门流行的编程语言,它提供了许多有用的函数和库来帮助开发者处理各种任务。其中,文件操作函数是我们经常需要使用的,因为文件是我们存储数据和信息的主要方式之一。在本文中,我们将介绍如何使用C++中的文件操作函数来读取、写入、添加、删除和...
    99+
    2023-11-18
    文件操作函数 C++中的文件操作 使用文件函数
  • C#中如何使用XmlTextWriter创建XML文件
    这篇文章将为大家详细讲解有关C#中如何使用XmlTextWriter创建XML文件,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。XmlTextWriter对象简介:XmlTextWriter...
    99+
    2023-06-17
  • C#数组操作如何使用
    本篇内容介绍了“C#数组操作如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!C#数组操作之对数组的理解数组是对象:在 C# 中,数组实...
    99+
    2023-06-17
  • C#如何使用iTextSharp操作PDF
    这篇“C#如何使用iTextSharp操作PDF”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C#如何使用iTextShar...
    99+
    2023-07-02
  • 利用dom4j如何实现操作xml文件中的demo
    本篇文章为大家展示了利用dom4j如何实现操作xml文件中的demo,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。废话不多说,直接上代码package com.cn.shop.util;import...
    99+
    2023-05-31
    dom4j xml demo
  • C#中如何使用文件IO和流操作进行数据读写
    C#中如何使用文件IO和流操作进行数据读写,需要具体代码示例在C#编程中,文件IO和流操作是常用的技术,用于读取和写入文件的数据。无论是处理文本文件、二进制文件,还是读取网络流数据,我们都可以通过文件IO和流操作来实现。文件IO和流操作提供...
    99+
    2023-10-22
    C#文件IO操作 C#流操作 数据读写技术
  • C#使用StreamReader和StreamWriter类读写操作文件
    StreamReader 类 (System.IO) | Microsoft 官方文档 StreamWriter 类 (System.IO) | Microsoft 官方文档 一、文...
    99+
    2024-04-02
  • 如何使用JS操作文件
    这篇文章主要讲解了“如何使用JS操作文件”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用JS操作文件”吧!JS读取文件 FileReaderFileReader 对象允许Web应用程序...
    99+
    2023-06-22
  • 如何使用C++处理数据库连接和操作?
    在c++++中使用data access objects (dao) 库连接和操作数据库,包括建立数据库连接、执行sql查询、插入新记录和更新现有记录。具体步骤为:1. 包含必要的库语句...
    99+
    2024-05-12
    c++ 数据库 access
  • 使用C#怎么对XML对象进行序列化和反序列化操作
    使用C#怎么对XML对象进行序列化和反序列化操作?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。public class XMLUtil{&n...
    99+
    2023-06-06
  • C#中如何使用三元操作符
    C#中如何使用三元操作符,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。C# 操作符之三元操作符“:”是什么呢?C# 操作符之三元操作符“:”有时也称为条件操作符...
    99+
    2023-06-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作