C#中XML介绍:概念、作用之数据存储与数据交换

C#中XML介绍:概念、作用之数据存储与数据交换

[id_1185696227]

[id_6[id_820967639]002650]

XML文件的作用包括:

数据存储方面,XML被广泛采用作为一种存储手段,用以保存应用软件的设置、配置信息以及其它相关数据。以微软的.NET框架为例,其中的配置文件,诸如app.config和web.config,均采用了XML格式。

数据交换方面,XML因其文本属性和极高的可读性而广受欢迎,成为了一种常见的数据交换格式。它能够在众多系统和程序之间进行信息的传递,特别是在Web服务和面向服务的架构(SOA)领域。

数据结构的具体表述是:XML技术能够详细阐述数据的组织形式,它通过使用元素与属性来展现数据的层级关系及其内在含义。这样的做法对于维护数据的一致性与整体性具有重要意义。

XML文件,作为一种文本格式,具备平台无关的特性,能够轻易地在各种操作系统及不同环境中进行迁移与运用。

如其特性所表明,XML具有高度的灵活性,这允许你自行创建定制的标签和文档布局,以便满足个性化需求,无需依赖既定的数据标准。

国际化优势显著:XML兼容Unicode编码,从而能够涵盖人类所有语言中的文本内容,这对构建国际化应用至关重要。

运用XML Schema定义语言(XSD),我们能够设定XML文档的架构与数据类别,同时对其文档进行核实,以此保障数据的准确性。

通过XSLT(可扩展样式表语言转换),能够将XML文件转换成其他格式的文件,比如HTML,以便在网页浏览器中进行展示。

在C#编程语言中,处理XML文件时,你可以借助System.Xml命名空间提供的各类组件,例如XmlDocument、XmlReader、XmlWriter和XmlSerializer等,它们能够实现XML文档的读取、编辑、生成以及序列化操作。

1.2 例子

在C#以及其他的编程语言领域,开发者可以利用特定的库和工具来创建或解读XML格式的信息,无需亲自编写或分析XML的标签及其结构。此类工具通常对数据进行高层次的概括,使得开发者能够借助编程语言中的数据结构来处理数据,随后它们将这些数据结构转化为恰当的XML格式,亦或将XML格式的数据解析为程序可用的数据结构。因此,无需深入探究其语法细节。

以下是一个示例,展示了一个简易的XML文件,其中记载了图书馆藏书的具体信息:


<[id_1948696472]>
  <book id="1">
    <title>The Great Gatsbytitle>
    <author>F. Scott Fitzgeraldauthor>
    <year>1925year>
    <genre>Fictiongenre>
  book>
  <book id="2">
    <title>Nineteen Eighty-Fourtitle>
    <author>George Orwellauthor>
    <year>1949year>
    <genre>Dystopiangenre>
  book>
  <book id="3">
    <title>To Kill a Mockingbirdtitle>
    <author>Harper Leeauthor>
    <year>1960year>
    <genre>Fictiongenre>
  book>
library>

这个XML文档遵循以下结构和特点:

XML文件适用于多种程序与服务的操作,用于获取、展示及处理图书馆藏书的相关资讯。鉴于XML的扩展性,我们能够便捷地增加额外的数据项,例如出版社信息、ISBN编号以及其他元数据。

1.3创建一个xml文件

若我们手中持有C#编写的某个对象,并期望将其内容转化为XML格式,那么我们可以借助XmlSerializer这一工具来实现对象的序列化过程。

using System;
using System.IO;
引用 System.Xml.Serialization 命名空间。
// 假设有一个Book类
public class Book
{
公开属性 Title,支持读取和设置。
公开属性 Author,用于获取或设置作者信息。
    public int Year { get; set; }
公开的字符串属性Genre,具有获取和设置的功能。
}
class Program
{
    static void Main()
    {
        // 创建一个Book实例
        Book myBook = new Book
        {
            Title = "The Great Gatsby",
作者名为弗·斯科特·菲茨杰拉德。
            Year = 1925,
            Genre = "Fiction"
        };
        // 创建一个XmlSerializer对象来进行序列化
创建一个名为 serializer 的新对象,该对象属于 XmlSerializer 类型,并指定其序列化类型为 Book。
        // 使用StreamWriter写入文件
以StreamWriter类实例化一个writer对象,并将其用于创建或打开"D:\\IDE\\book.xml"文件。
        {
序列化器将myBook对象的信息写入writer。
        }
控制台输出提示:“XML文档已成功创建。”
    }
}

在我们的目标地址处,已生成一个文件,但遗憾的是,该文件无法被成功打开。在此,需要特别指出的是,在上述案例中,.NET框架对XML的处理通常涉及将对象转换为XML格式,因此,选用XmlSerializer进行操作是更为恰当的选择。

在处理需读取、编辑XML文件或构建新XML文档架构的情况下,XmlDocument是一个合适的选择。值得注意的是,在.NET Core框架中,XmlDocument已被一个性能更优且更为先进的XDocument类所取代,该类隶属于System.Xml.Linq命名空间,并支持LINQ技术,同时提供了更为简化的API接口。

二、读取XML文件

若获得此类XML文档,应以C#编程语言进行文件读取操作,该文档中详细记录了若干班级学生的资料,包括姓名、年龄、行别及班级等信息。



  
    王五
    19
    男
    机械1班
  
  
    王六
    22
    男
    机械2班
  
  
    刘九
    21
    男
    机械3班
  
  
    阿红
    23
    女
    机械4班
  
  
    阿七
    20
    女
    机械5班
  
  
    数据版本信息
  

我们希望可以这样显示出来:

应该怎么办呢,我们可以按照这样的步骤来进行:

加载XML文件:

获取根节点:

遍历节点:

读取节点信息:

对象映射:

填充数据结构:

绑定到用户界面(可选):

异常处理(建议):

接下来我们就按照这个步骤完后读取xml文件的任务。

2.1加载XML文件

初始化一个XML文档操作类实例,命名为xml_Doc。
文档对象中成功引入了位于指定路径的“StuScore.xml”文件。

我们首先创建了一个名为xml_Doc的XmlDocument实例。XmlDocument是.NET框架内的一种类型,它能够构建一个代表XML文档的对象模型。通过这个类,我们可以执行XML文档的加载、修改以及保存操作。目前,xml_Doc仅代表一个空白的XML文档对象,尚未包含任何具体的数据内容。

我们接着运用了xml_Doc对象(本质上仍为XmlDocument的函数)的Load功能,目的是导入一个名为"StuText.xml"的XML文档。该字符串"StuText.xml"明确了文件的名称及其所在路径。若路径信息未被提供,系统将自动在应用程序当前的工作目录内搜寻该文件。(这里就是文件在程序目录中,所以没有具体路径)。

当调用Load方法时,会有下面几种情况:

xml_Doc对象试图搜寻并解锁目标XML文档。

一旦成功定位并获取该文件,XmlDocument将对其进行内容读取,并据此构建内部的文档对象模型(DOM)树。这棵DOM树呈现出一种节点层级结构,用以体现XML文档的架构,进而支持程序的查询与编辑操作。

在加载过程中若遇到语法错误,诸如标签不匹配或属性格式不当等问题,则会触发XmlException异常,因此,在执行Load方法的相关代码时,必须加入相应的异常处理机制,即try-catch块,以便捕捉并妥善处理这些异常情况。

加载完成之后,您便能够利用xml_Doc对象对XML文档进行访问与编辑。您能够检索特定的节点、属性,或者执行其他查询和修改任务。这些操作不仅能够帮助您提取所需数据,还允许您在内存中对XML文档进行修改,并将这些修改最终保存至文件或其他输出流中。

2.2 获取树的起始节点、提取相关数据、进行数据到对象的转换、构建数据结构,以及将用户界面与数据关联。

xml_Doc的根节点元素被赋值给变量rootNode;这是对XML文档中根目录的引用。

该代码段在加载XML文件之后,成功提取了XmlDocument对象中的文档根节点。根节点位于XML文件结构的最高层级,同时也是所有其他节点的直接上级。

在这里:

rootNode变量存储了XML文档的根元素引用。获得这一引用后,我们能够遍历XML文档中的所有元素,因为这些元素都是从该根元素向下嵌套的。借助这个引用,我们能够对XML文档的不同部分进行访问、编辑或查询。比如,我们可以查看根节点的子节点、属性等。

2.3 遍历节点、

 List list = new List();//创建对象集合         
对根节点中的各个子节点进行逐一扫描,其中根节点涵盖了所有子节点的集合。
            {
若(stuNode的)名称等于"Student",
                {
Student对象xml_Stu被成功创建,其类型为Student。
对stuNode中的每个子节点进行遍历,即逐一访问。
                    {
根据子节点的名称,通过switch语句将其封装至对象的属性之中。
                        {
                            case "StuName":
xml_Stu的StuName属性被赋予值,该值来源于subNode的InnerText属性,即《节点名称》所对应的《节点值》。
                                break;
                            case "StuAge":
xml_Student的StudentAge属性被赋值为将子节点内部文本转换为16位整型数的结果。
                                break;
                            case "Gender":
xml_学生的性别属性被设置为子节点内的文本内容。
                                break;
                            case "ClassName":
xml_学生的类名被设置为子节点的内容。
                                break;
                        }
                    }
                    list.Add(xml_Stu);
                }
            }
本数据网格视图的学生列表数据源被设置为该列表。

此代码段在C#语言环境下编写,主要功能是从XML文件中提取信息,并将这些信息封装进一个对象集合里。随后,该集合被指定为数据网格视图控件(即我们的显示界面)的数据来源,从而实现数据的用户界面展示。

我们首先建立了一个新的列表,命名为list,该列表的用途是存放Student类型的实体。Student是一个我们自行定义的类别,它包含了诸如StuName(代表姓名)、StuAge(代表年龄)、Gender(代表性别)以及ClassName(代表班级)等属性。

遍历rootNode的子节点,针对每一个stuNode节点,执行操作。

该操作涉及对先前所述根节点的直接后代节点进行逐一扫描。在此次遍历中,stuNode标识了正被访问的子节点。每经过一次循环,都将对单个子节点进行相应的处理。

//

//

这里插播一条直接子节点:

"直接子节点"这一术语,特指在文档对象模型(DOM)树结构中,位于某一节点下一层的节点。在XML或HTML文档中,任何节点,比如一个元素,都可以拥有子节点,这些子节点可能包括元素节点、文本节点,甚至是注释节点等多种类型。

以XML为例,考虑以下简单的结构:

<Parent>
    <Child>First childChild>
    <Child>Second childChild>
Parent>

在这个例子中,

元素有两个直接子节点,都是元素。这些元素是

元素的直接子节点,因为它们是

第一层的子节点。若这些元素内部包含更多元素,那么这些额外的元素将作为该元素的直接后代节点,而非直接子节点。

的直接子节点。

在操作DOM的过程中,准确地区分“直接子节点”——即某个特定节点的直接一级子节点——以及所有后代节点——涵盖所有层级的子节点——至关重要,因为这种区分将直接影响到我们设计代码时遍历和操作DOM的方式。

///

///

若(stuNode的Name属性值)等于(“Student”)。

在遍历子节点过程中,程序会核对节点名称,若其名为"Student",则表明该节点中储存了学生对象的相关信息。

Student对象xml_Stu被创建,其类型为Student。

当检测到存在一个名为"Student"的节点时,程序将自动生成一个全新的Student对象,并将其命名为xml_Stu。

对Student节点下的每一个子节点进行逐一扫描。

随后,程序对"Student"这一节点下的各个子节点进行遍历,这些子节点中存储了学生的详细信息,例如他们的名字和年龄。

switch (subNode.Name)
{
    // ...
}

在当前的switch语句里,程序会依据子节点的名字来决定将节点中的文字内容(即InnerText)分配给xml_Stu对象的哪一个属性。比如,当子节点的名字为"StuName"时,它的文字信息就会被分配给xml_Stu对象的StuName属性。

list.Add(xml_Stu);

当xml_Stu对象的各项属性信息全部填写完毕,该对象便会被纳入list列表之中。

该数据网格视图的学生列表数据源被设置为列表。

最终,名为dgvStuList的数据网格视图控件被指定为list列表的数据来源。该控件隶属于一个Windows窗体应用程序,其功能是展示数据。经过此配置,dgvStuList将负责展示list列表内包含的所有学生资料。

这段代码的功能在于,它能够从XML文档中提取出具有特定结构的数据,比如本例中的学生信息,然后将其转换成相应的C#对象,并最终将这些信息在用户界面中呈现出来。

2.4例子源代码

链接:

提取码:1234

你可能想看:
« 上一篇
下一篇 »

相关推荐

FreeBasic:强大免费开源的64位basic编译器及应用优势

2025年05月10日

82阅读

脊柱侧弯矫正方法大盘点:运动康复、支具矫正等多种方式

2025年05月09日

84阅读

如何在winForm标题栏去掉标题文字且任务栏图标正常显示

2025年05月09日

83阅读

十一黄金周促销广告词大全,国庆购物狂欢等你来

2025年05月09日

77阅读

关闭快速编辑模式及插入模式,设置控制台指定文字颜色举例

2025年05月09日

63阅读

黄金搭档低糖高钙饮品包装及成分功效全解析,适合人群要知晓

2025年05月09日

90阅读