Json和Xml

一、前言

   学习心得:C# 入门经典第8版书中的第21章《Json和Xml》

二、Xml的介绍

Xml的含义:

        可标记性语言,它将数据以一种特别简单文本格式储存。让所有人和几乎所有的计算机都能理解。


XML文件示例:

<?xml version="1.0" encoding="utf-8"?>
<Books><CSharp Time="2019"><book>C# 入门经典</book><book>C# 高级编程</book><book>C# 深入解析</book><book>WPF 编程宝典</book></CSharp><Java></Java>
</Books>

提示:

        节点:在Xml文件中有多个节点,节点就是<节点>:用来声明一个节点  </节点> 结束当前节点。如果在当前的节点中创建了节点那么就是称呼为给当前的节点创建了一个子节点。元素和特性可以统称为节点。 

        元素:元素的含义是指<></>这样的标签。

        特性:特性指某某元素的特性。如上述 Time 就是 Csharp的特性

三、Json的介绍

Json的含义:

        Json在我们C#开发当中会使用到的第二种数据语言。它主要使用在Wen服务中和Wen浏览器中。

Json文件示例:

{"?xml": {"@version": "1.0","@encoding": "utf-8"},"Books": {"CSharp": {"@Time": "2019","book": [ "C# 入门经典", "C# 高级编程", "C# 深入解析", "WPF 编程宝典" ]},"Java": ""}
}

示例解释:Json中使用{}表示数据块, 逗号分隔数据。[]为鉴定为数组。 冒号指定当前元素的值

提示:当前的Json示例与上面Xml示例存储的数据是一致的。 

四、Xml 模式介绍和创建

1 Xml 模式的介绍

         Xml模式是指在我们创建Xml文档时对文档的一种格式规范,使当前Xml文档不会出现不打算处理的数据。C#使用的标准模式xml格式时XSD(XML Schema Definition)

2 Xml 模式的创建

上述介绍可能不太能理解,我们创建一下就能理解了。共三步

2.1 打开Visual Studio 创建Xml文件

 

看到下面的页面则代表创建成功了

2.2  输入想要的Xml格式。(创建一个规范的Xml格式)

示例:

<?xml version="1.0" encoding="utf-8"?>
<Student><Name name=""><Height></Height><Weight></Weight><Class></Class></Name>
</Student>

保存

 输入保存的名字以及路径

 2.3 创建XML模式(XML架构)

随后编译器为我们生成了一个Xsd后缀的一个文件

 一样的将当前文件保存。

 创建结束(创建了一个StudentXml 模式) 

3 Xml 文件模式使用

将上面我们创建的模式使用起来

3.1 先创建一个Xml文件(同样的方式)

3.2 指定使用的模式(使用的架构)

 如果表格中没有您创建的架构可以,在右侧添加。 

3.3 使用Xml模式(架构)

        在我们输入的时,智能提示就显示了我们之前的格式,可以帮助我们快速创建一个刚刚一样格式的Xml文件。

示例:

<?xml version="1.0" encoding="utf-8"?>
<Student><Name name="张三"><Height> 188 </Height><Weight>75kg</Weight><Class>1805</Class></Name>
</Student>

注意:如果您添加我们模式中没有的节点我们的编译器会报警告。


提示:如果您需要反复使用当前的模式建议把当前模式添加到Visual Studio中的XML架构中

五、读取和处理Xml文件

1 访问和处理Xml文件的类

类名描述
XmlNode表示文档中的一个元素。
XmlDocument读取存储在磁盘或网络地址上的Xml文件。
XmlElement表示一个元素,通常用来储存根目录。
XmlAttribute表示节点中的特性。
XmlText表示节点中的文本数据。
XmlComment表示特殊类型元素,不是Xml文件的一部分,用于便于阅读的其他拓展信息。
XmlNodeList表示一个元素集合。

举个例子:

  //XmlDocument 继承 XmlNode   XmlDocument document = new XmlDocument();document.Load(@"C:\Users\Administrator\Desktop\XMLFile2.xml");

示例解释:        

        XmlDocument 通过方法Load读取数据文件,参数为指定的Xml文件的路径,无返回类型。

//获取文档的根目录  也就获取了XML的所有文件内容。
XmlElement xmlElement= document.DocumentElement;

示例解释:

        (XmlDocument类型) DocumentElement属性返回当前Xml文件的根目录,如果没有则返回Null。

 //获取当前节点中后面的第一个节点XmlNode xmlNode = xmlElement.FirstChild;//获取当前节点中的最后一个节点XmlNode xmlNode1 = xmlElement.LastChild;//获取当前节点中的父节点XmlNode xmlNode2 = xmlElement.ParentNode;// 访问同一层级的下一个节点,而不考虑节点类型XmlNode xmlNode3 = xmlElement.NextSibling;//获取当前 是否有子节点Boolean IshaveXmlNode = xmlElement.HasChildNodes;

示例解释:

        我使用到了多种属性,类型都是一个节点XmlNode类型,代码当中都有相关注释。 


 其中:

        XmlText、XmlComment、XmlAttribute、XmlNode    是没有公共的无参构造函数或是抽象的类。但我们都可以通过 XmlDocument实例来创建

示例(读取Xml文件的节点)

 //获取所有节点foreach (XmlNode item in xmlElement.ChildNodes){Console.WriteLine("根节点下有"+ item.Name + "节点");foreach (XmlNode item2 in item.ChildNodes){Console.WriteLine($"{item.Name}节点下有"+ item2.Name+"节点");}}

示例解释:ChildNodes是获取当前节点的所有子节点 。

输出 :

 

2 示例(获取Xml内容,书上示例

   private string FormatText(XmlNode node, string text, string indent){if (node is XmlText){text += node.Value;return text;}if (string.IsNullOrEmpty(indent))indent = "";else{text += "\r\n" + indent;}if (node is XmlComment){text += node.OuterXml;return text;}text += "<" + node.Name;if (node.Attributes.Count > 0){AddAttributes(node, ref text);}if (node.HasChildNodes){text += ">";foreach (XmlNode child in node.ChildNodes){text = FormatText(child, text, indent + "  ");}if (node.ChildNodes.Count == 1 &&(node.FirstChild is XmlText || node.FirstChild is XmlComment))text += "</" + node.Name + ">";elsetext += "\r\n" + indent + "</" + node.Name + ">";}elsetext += " />";return text;}
  private void AddAttributes(XmlNode node, ref string text){foreach (XmlAttribute xa in node.Attributes){text += " " + xa.Name + "='" + xa.Value + "'";}}

 使用方式:

 XmlDocument document = new XmlDocument();document.Load(booksFile);textBlockResults.Text = FormatText(document.DocumentElement as XmlNode, "", "");

 示例解释:

        如其中的node is XmlText  来判断当前节点是否包含了文本 如前面的示例Class Weight  Height 这三个是XmlText 因为只有他们是实际包含了文本。其中的XmlComment判断也类似。

3 节点的操作

3.1 修改:

        可以通过Value 属性来获取,但如果不是实际包含了文本,那么返回结果就是Null


3.2 插入:

        前面提到 XmlText、XmlComment、XmlAttribute、XmlNode 其中我们可以通过XmlDocument使用方法来创建

举个例子:

  XmlDocument document = new XmlDocument(); document.Load(booksFile);//创建一个特性document.CreateAttribute("特性");//创建一个节点 是什么类型,节点名称,"节点的Uri"document.CreateNode(XmlNodeType.Text,"名字","节点的名称空间 Uri");//创建一个XmlElement类型的节点 "document.CreateElement("节点名称");//创建一个XmlText类型的节点document.CreateTextNode("节点中显示的内容");//创建注释document.CreateComment("示例节点");

示例解释:展示了创建节点的多个方法。

将创建的节点添加进去:

  // 加载当前Xml文件XmlDocument document = new XmlDocument();document.Load(@"C:\Users\Administrator\Desktop\XMLFile3.xml");//获取根节点XmlElement root = document.DocumentElement;//创建节点 XmlElement newOther = document.CreateElement("Other");XmlComment comment = document.CreateComment("其他");XmlElement newXmlNode = document.CreateElement("FatherAndMother");XmlElement father = document.CreateElement("father");XmlElement mother = document.CreateElement("mother");XmlText liu = document.CreateTextNode("刘女士");XmlText li = document.CreateTextNode("李男士");//Other 节点下的节点newOther.AppendChild(newXmlNode);//Other节点的注释newOther.AppendChild(comment);//father and mother节点下的节点newXmlNode.AppendChild(father);newXmlNode.AppendChild(mother);//节点的文本mother.AppendChild(liu);father.AppendChild(li);root.InsertAfter(newOther,root.FirstChild);//保存文件document.Save(@"C:\Users\Administrator\Desktop\XMLFile3.xml");

效果:

 

3.3 删除

  XmlDocument document = new XmlDocument();document.Load(booksFile);XmlElement root = document.DocumentElement;if (root.HasChildNodes){XmlNode book = root.LastChild;root.RemoveChild(book);document.Save(booksFile);}

3.4 选择

SerializeXmlNode返回第一个匹配的节点 

 XmlDocument document = new XmlDocument();document.Load(booksFile);//返回根目录string str = Newtonsoft.Json.JsonConvert.SerializeXmlNode(document);

六、XML转换为JSON

1安装Newtonsoft.Json 包

2 转换代码

 XmlDocument document = new XmlDocument();document.Load(@"C:\Users\Administrator\Desktop\XMLFile3.xml");string json = Newtonsoft.Json.JsonConvert.SerializeXmlNode(document);System.IO.File.WriteAllText(@"C:\Users\Administrator\Desktop\XMLFile2.json", json);

转换结果: 

{"?xml": {"@version": "1.0","@encoding": "utf-8"},"Student": {"Name": {"@name": "张三","Height": " 188 ","Weight": "75kg","Class": "1805"},"Other": {"FatherAndMother": {"father": "李男士","mother": "刘女士"} /*其他*/}}
}

七、XPath搜索XML文件

SelectNodes方法通过Xpath表达式来对Xml进行查找

  XmlDocument document = new XmlDocument();document.Load(@"C:\Users\Administrator\Desktop\XMLFile3.xml");XmlNodeList  xmlNodeList= document.DocumentElement.SelectNodes(".") ;

示例解释:

        在XPath中,.代表当前节点。当你使用.时,它指代的是上下文中的当前节点。这通常用于在XPath表达式中指明相对位置,而不是从根节点开始定位节点。 

 1 Xpath表达式示例:

  1. 选择节点:

    • 选择所有节点: //*
    • 选择特定节点: /bookstore/book (选择根节点下的所有book节点)
    • 选择当前节点: .
  2. 按名称选择:

    • 选择所有名称为title的节点: //title
    • 选择当前节点的父节点: ..
    • 选择根节点: /
  3. 按属性选择:

    • 选择所有具有特定属性的节点: //*[@attribute]
    • 选择特定属性值的节点: //*[@attribute='value']
  4. 按位置选择:

    • 选择第一个节点: (//book)[1]
    • 选择最后一个节点: (//book)[last()]
    • 选择前几个节点: (//book)[position() <= 3]
  5. 按条件选择:

    • 选择价格大于 50 的书籍: //book[price > 50]
    • 选择作者为"Author Name"的书籍: //book[author='Author Name']
    • 选择第一个book节点的title: /bookstore/book[1]/title

这些表达式可以帮助你根据需要定位XML文档中的不同节点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/501947.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ec20驱动_物联网基础:移远EC20固件升级

使用移远 QFlash_V4.14 工具升级移远 EC20 4G模块固件1 准备工作 1.1 EC20 USB驱动安装安装过程参考移远官方手册&#xff1a;《Quectel_LTE&5G_Windows_USB_Driver_安装指导_V1.0.pdf》&#xff0c;有详细USB安装指导&#xff0c;该手册及驱动文件可以去移远官方下载或后续…

的微波感知_上海交大彭志科教授团队研发:微波微动监测与智能感知技术

上海9月18日电(葛俊俊) 准确监测方舱医院大量感染患者的生命状况&#xff0c;精确“诊断”大桥工程结构是否存在安全隐患&#xff0c;随时随地获取独居老人在家的健康体征……上海交通大学彭志科教授团队研发的基于微波感知的微动监测与环境智能前瞻技术&#xff0c;像一种神奇…

小米笔记本引导修复_知识帖,笔记本电脑不能开机?你可以试试这些办法

大家经常遇到电脑开机不能进入系统的时候是不是特别难受,朝歌后面几篇文章会讲讲一些常见的电脑问题和解决办法啦 前面有一个系列的文章都是在组装电脑的问题,大家感兴趣的可以关注了去主页看看呀 在现在的日常生活里,笔记本电脑对于很多人来说会比台式机重要的多,因为笔记…

java同步锁synchronized_synchronized、锁、多线程同步的原理是咋样的?

先综述个结论&#xff1a;一般说的synchronized用来做多线程同步功能&#xff0c;其实synchronized只是提供多线程互斥&#xff0c;而对象的wait()和notify()方法才提供线程的同步功能。一般说synchronized是加锁&#xff0c;或者说是加对象锁&#xff0c;其实对象锁只是synchr…

python追加_如何在Python中追加文件?

慕田峪7331174 您需要在附加模式下打开文件&#xff0c;方法是将“a”或“ab”设置为模式。见open&#xff08;&#xff09;。使用“a”模式打开时&#xff0c;写入位置将始终位于文件末尾&#xff08;附加&#xff09;。您可以使用“a ”打开以允许读取&#xff0c;向后搜索和…

系统相机裁剪比例_拍不出好照片,你缺的不是好手机而是相机设置的秘笈

玩转手机摄影&#xff0c;每天分享原创的手机摄影教程&#xff0c;手机相机功能、人像、风光、夜景、创意拍摄技巧&#xff0c;还有后期调色、修图等教程&#xff0c;欢迎感兴趣的朋友点击右上角&#xff0c;关注我们&#xff01;--------------------------------------------…

任意点 曲线距离_中级数学11-曲线函数

距离、中点、圆抛物线椭圆双曲线非线性方程曲线本章介绍曲线及其性质。这里应用两圆锥体构成的推覆体与一个平面相交的截面&#xff0c;形成的曲线。从左到右截面&#xff1a;圆、抛物线、椭圆、双曲线距离、中点、圆应用勾股定理可求出三角形各边的长度。同样在直角坐标系中&a…

opencv 边缘平滑_基于OpenCV的车道检测实现(一)

无人驾驶的话题日趋起热&#xff0c;而车道线检测对于无人驾驶的路径规划来讲特别重要。要遵守交通规则&#xff0c;首先的要求便是对车道线检测&#xff0c;而且通过检测车道线可以进一步的检测地面指示标志、进行前碰撞预警策略设计等。早早就对OpenCV感兴趣&#xff0c;但迟…

字符串equal_Java String:字符串常量池

作者&#xff1a;Seven_Nee来自&#xff1a;https://segmentfault.com/a/1190000009888357作为最基础的引用数据类型&#xff0c;Java 设计者为 String 提供了字符串常量池以提高其性能&#xff0c;那么字符串常量池的具体原理是什么&#xff0c;我们带着以下三个问题&#xff…

cubemx串口的发送与接收_串口收发模块设计

串口收发模块设计作者&#xff1a;巩文宏 公众号&#xff1a;数字积木 该串口收发模块有串口发送模块&#xff0c;串口接收模块&#xff0c;波特率生成模块&#xff0c;发送数据fifo模块&#xff0c;接收数据的fifo模块组成。 默认配置下&#xff0c;要求输入的参考时钟为50MHz…

字段类型 sqoop_数据迁移工具Sqoop

熬过去&#xff0c;出众。熬不过&#xff0c;出局。这是最真实的人生&#xff0c;人都是熬过来的。Sqoop 是一个用来将Hadoop和关系型数据库中的数据相互转移的工具&#xff0c;它是Hadoop环境下连接关系数据库与Hadoop存储系统的桥梁&#xff0c;支持多种关系型数据源和Hive、…

git 删除tag_git使用教程9pycharm 使用 tag 打标签

前言当我们的代码完成了第一阶段的需求&#xff0c;版本稳定后&#xff0c;希望能出个稳定版本。于是在 commit 后需要打个 tag 标签&#xff0c;也就是我们平常说的版本号&#xff0c;如v1.0版本本篇讲解如何使用 pycharm 打 tag 标签&#xff0c;并推送到 github 上&#xff…

模块 python_Python入门基础:模块基础

模块是一个文件(.py文件)&#xff0c;包含变量&#xff0c;类定义语句和与特定任务相关的功能。预先装有Python的Python模块称为标准库模块。创建我们的模块我们将创建一个名为tempConversion.py的模块&#xff0c;该模块将值从F转换为C&#xff0c;反之亦然。# tempConversion…

hash地址_深入浅出一致性Hash原理

一、前言在解决分布式系统中负载均衡的问题时候可以使用Hash算法让固定的一部分请求落到同一台服务器上&#xff0c;这样每台服务器固定处理一部分请求&#xff08;并维护这些请求的信息&#xff09;&#xff0c;起到负载均衡的作用。但是普通的余数hash&#xff08;hash(比如用…

go语言io reader_Go语言中的io.Reader和io.Writer以及它们的实现

在使用Go语言的过程中&#xff0c;无论你是实现web应用程序&#xff0c;还是控制台输入输出&#xff0c;又或者是网络操作&#xff0c;不可避免的会遇到IO操作&#xff0c;使用到io.Reader和io.Writer接口。也也许对这两个接口和相关的一些接口很熟悉了&#xff0c;但是你脑海里…

hive 开窗函数_Hive的架构剖析

本文主要介绍Hive的架构和以及HQL的查询阶段&#xff0c;主要内容包括&#xff1a;Hive的架构架构中的相关组件介绍HQL的查询阶段Hive的架构hive的基本架构图如下图所示&#xff1a;相关组件介绍数据存储Hive中的数据可以存储在任意与Hadoop兼容的文件系统&#xff0c;其最常见…

ntr模式_ntr什么意思?求详细解释。。。

展开全部是俚语&#xff0c;表示环境的意32313133353236313431303231363533e59b9ee7ad9431333433623738思。1、语法&#xff1a;(1)可指影响人们生活的各种抽象和具体的“状况&#xff0c;环境”。可以接由that引导的主语从句&#xff0c;从句中的谓语动词一般要用虚拟式(多为动…

小程序switch内部加上文字_文字游戏大全:模拟游戏会长经营公会的小程序,你会管理公会吗?...

40000游戏爱好者已加入我们&#xff01;每天推荐好玩游戏&#xff01;加入我们&#xff0c;沐沐带你发现好游戏&#xff01;《游戏会长》游戏小程序好玩吗&#xff1f;《游戏会长》小游戏怎么玩&#xff1f;只有你想不到&#xff0c;没有我找不到的好游戏&#xff01;「良心好游…

php实现第三方邮箱登录_JavaScript实现第三方登录网站原理在这呢

点关注&#xff0c;不迷路&#xff0c;每天更新大量前端资料前端实现第三方登录之OAuth2.0协议OAuth 2.0 规定了四种获得令牌的流程。我们可以选择最适合自己的那一种&#xff0c;向第三方应用颁发令牌。下面就是这四种授权方式。授权码模式(authorization-code)简化模式(impli…

pfx证书密码怎么查询_网站是HTTP?10分钟变成HTTPS!域名免费添加配置SSL证书,变成https//环境...

对于小程序request请求需要https域名、navigator.geolocation定位也需要在https环境下才可以生效等问题&#xff1b;前端开发越来越需要https环境来来测试一下API接口和各类问题&#xff0c;今天来讲解一下怎么免费快速把普通的http网站配置升级成https协议。首先向大家介绍一下…