XML简述

  XML用于描述数据,是当前处理结构化文档信息的有力工具。与操作系统编程语言的开发平台无关,可以实现不同系统之间的数据交互。

  xml文件结构:

1 <?xml version="1.0" encoding="UTF-8" ?>
2 <people>
3 <Name>姓名</Name>
4 <Sex>性别</Sex>
5 </people>

代码中第一行是XML声明,它一般在XML文档的第一行。它由两个部分组成:

    version:文档符合XML1.0规范。

    encoding:文档字符编码,默认为“UTF-8”。

    <!--注释-->为注释语法。

XML语言有3个特点:

    1.XML中的每对标记通常被称为节点,他们是成对出现而且必须成对出现的,用来描述这个节点存储的内容。在节点中存储该节点的信息。

    2.XML中用于描述数据的各个节点可以自由横向扩展和纵向扩展,即可以向下扩展也可以向内扩展(嵌套)。

    3.XML文件中的节点严格区分大小写。例:<Name>名字</Name>和<name>名字</name>这两个节点内容相同,但节点名称不一样,即是两个节点。

在C#中操作XML文件

  在C#中操作并解析XML文件分为6个步骤:

 1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Threading.Tasks;
6 using System.Xml; //1.引入命名空间
7
8 namespace Demo
9 {
10 class Program
11 {
12 static void Main(string[] args)
13 {
14 XmlDocument doc = new XmlDocument(); //2.创建XML文件对象
15 doc.Load("Path.xml"); //3.从指定路径读取整个XML文件的结构
16 XmlNode nodes = doc.DocumentElement; //4.获取XML文件的根节点
17 foreach (XmlNode node in nodes.ChildNodes) //5.遍历根节点的子节点
18 {
19 string name = node["name"].InnerText; //6.获取XML文件节点中的内容
20 string sex = node["sex"].InnerText;
21 Console.WriteLine("姓名:{0},性别:{1}", name, sex);
22 }
23 }
24 }
25 }

XmlDocument对象:

    表示整个XML文档,它使用Load方法将指定的XML文件读入XmlDocument对象,Load方法的参数是XML文档的路径。

    DocumentElement属性用于获取根节点。

XmlNode对象:

    XmlNode对象表示一个XML中的节点。
    ChildNodes属性用来获取指定节点的所有子节点。

    Name属性可以获取当前节点的名称。                         例:<name>名字</name>获取name。

    Inner Text属性用来获取当前节点的值。                     例:<name>名字</name>获取名字。

    Attributes属性可以获取当前节点的特性。                  例:<name type="dog">名字</name>      Attributes["type"]获取dog。

    注意:ChildNodes属性表示当前节点的所有子节点,这里的所有子节点表示的是当前子节点的集合。

XML解析

XML文件除了给开发者看,更多的情况使用程序读取xml文件的内容。这叫做xml解析

XML解析方式(原理不同)

DOM解析

SAX解析

XML解析工具

DOM解析原理:
1)JAXP (oracle-Sun公司官方)

2)JDOM工具(非官方)

3)Dom4J工具(非官方)
三大框架(默认读取xml的工具就是Dom4j)
.......

SAX解析原理:1)Sax解析工具(oracle-sun公司官方

什么是DOM解析

DOM解析原理:xml解析器一次性把整个xml文档加载进内存, 
然后在内存中构建一颗Document的对象树,通过Document对象, 
得到树上的节点对象,通过节点对象访问(操作)到xml文档的内容。

Dom4j工具

非官方,不在jdk中。
使用步骤:
1)导入dom4j的核心包。 dom4j-1.6.1.jar

2)编写Dom4j读取xml文件代码

* 示例

    /**
* 第一个Dom4j读取xml文档的例子
* @author APPle
*
*/
public class Demo1 {
public static void main(String[] args) {
try {
//1.创建一个xml解析器对象
SAXReader reader = new SAXReader();
//2.读取xml文档,返回Document对象
Document doc = reader.read(new File("./src/contact.xml")); System.out.println(doc);
} catch (DocumentException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}

Domj4读取xml文件

  • 节点:
  • Iterator  Element.nodeIterator();  //获取当前标签节点下的所有子节点
    • 案列:

      /**
      * 得到节点信息
      */
      @Test
      public void test1() throws Exception{
      //1.读取xml文档,返回Document对象
      SAXReader reader = new SAXReader();
      Document doc = reader.read(new File("./src/contact.xml"));
      //2.nodeIterator: 得到当前节点下的所有子节点对象(不包含孙以下的节点)
      Iterator<Node> it = doc.nodeIterator();
      while(it.hasNext()){//判断是否有下一个元素
      Node node = it.next();//取出元素
      //继续取出其下面的子节点
      //只有标签节点才有子节点
      //判断当前节点是否是标签节点
      if(node instanceof Element){
      Element elem = (Element)node;
      Iterator<Node> it2 = elem.nodeIterator();
      while(it2.hasNext()){
      Node n2 = it2.next();
      System.out.println(n2.getName());
      }
      }
      }
      }
    • 案例2:得到xml所有节点(使用递归)

      /**
      * 遍历xml文档的所有节点
      * @throws Exception
      */
      @Test
      public void test2() throws Exception{
      //1.读取xml文档,返回Document对象
      SAXReader reader = new SAXReader();
      Document doc = reader.read(new File("./src/contact.xml"));
      //得到根标签
      Element rooElem = doc.getRootElement();
      getChildNodes(rooElem);
      } /**
      * 获取 传入的标签下的所有子节点
      * @param elem
      */
      private void getChildNodes(Element elem){
      System.out.println(elem.getName());
      //得到子节点
      Iterator<Node> it = elem.nodeIterator();
      while(it.hasNext()){
      Node node = it.next();
      //1.判断是否是标签节点
      if(node instanceof Element){
      Element el = (Element)node;
      //递归
      getChildNodes(el);
      }
      };
      }

可扩展标记语言XML(淅淅沥沥的小雨)的更多相关文章

  1. 可扩展标记语言XML之二:XML语言格式规范、文档组成

    大家好,小乐又来了,好久不见!这次接着上次可扩展标记语言XML之一:XML概念,作用,示例,继续讲述XML. 一.格式良好的 xml 1.语法规范: 1).必须有 XML 文档声明: <?xml ...

  2. 可扩展标记语言XML之一:XML的概念、作用与示例

    哈喽大家好啊,乐字节小乐又来给大家分享Java技术文章了.上次已经讲完了Java多线程相关知识(可以看我博客文章), 这次文章将讲述可扩展标记语言XML 一. 标记语言 标记语言,是一种将文本(Tex ...

  3. 可扩展标记语言XML

    XML简述 XML用于描述数据,是当前处理结构化文档信息的有力工具.与操作系统编程语言的开发平台无关,可以实现不同系统之间的数据交互. 结构 <?xml version="1.0&qu ...

  4. XML 概述 (可扩展标记语言)

    XML:eXtensible Markup Language  可扩展标记语言 概念:可扩展:xml中所有的标签都是自定义的.没有预定义的.        功能:            存储数据   ...

  5. 关于XML(可扩展标记语言)的基础知识与写法------2017-05-18

    XML(Extensible Markup Language) HTML:超文本标记语言,主要用来展示   XML:可扩展标记语言,用来做数据传输XML特点: 1.树状结构,有且只有一个根 2.标签名 ...

  6. 关于XML(可扩展标记语言)的基础知识与写法

    XML(Extensible Markup Language) HTML:超文本标记语言,主要用来展示   XML:可扩展标记语言,用来做数据传输XML特点:1.树状结构,有且只有一个根2.标签名自定 ...

  7. java XML(可扩展标记语言)

    XML 是EXtensible Markup Language的缩写,它是一种类似于HTML的标记语言,称为可扩展标记语言,传输数据而不是显示数据,可以自定义标签,具有自我描述性是一种通用的数据交换格 ...

  8. XML简介——可扩展标记语言(Extensible Markup Language)

    (What) XML是什么? XML指可扩展标记语言(Extensible Markup Language) 1.  XML是一种标记语言,类似HTML. 2.  XML具有自我描述性 3.  XML ...

  9. 标记语言XML

    标记语言概述 标记语言,是一种将文本(Text)以及文本相关的其他信息结合起来,展现出关于文档结构和数据处理细节的电脑文字编码.一部分是标记,一部分是标记中的内容,两部分构成标记语言   <标记 ...

随机推荐

  1. 问题 A: 喷水装置(一)

    题目描述 现有一块草坪,长为20米,宽为2米,要在横中心线上放置半径为Ri的喷水装置, 每个喷水装置的效果都会让以它为中心的半径为实数Ri(0<Ri<15)的圆被湿润,这有充足的喷水装置i ...

  2. Spring IOC&DI 控制反转和依赖注入

    控制反转(Inversion of Control,缩写为IOC),它是把你设计好的对象交给spring控制,而不再需要你去手动 new Object(); 网上对于IOC的解释很多,对程序员而言,大 ...

  3. Linux基础五:网络配置与管理

    五.网络配置与管理 1.网络知识 2.命令 ifconfig命令  <=>  ip  addr  show 命令--查看本地所有网卡配置信息 ens32:本地以太网网卡,lo:本地回环网卡 ...

  4. Centos上安装MongoDB4.X

    一.下载并解压MongoDB 1.下载MongoDB 取件码w2px 2.通过ftp软件上传的服务器上,我的位置:/root/softwares 3.解压并放在opt文件夹下:tar zxvf mon ...

  5. 解决异常:“The last packet sent successfully to the server was 0 milliseconds ago. ”的办法

    出现异常"The last packet sent successfully to the server was 0 milliseconds ago."的大部分原因是由于数据库回 ...

  6. Javascript复制内容到剪贴板,解决navigator.clipboard Cannot read property 'writeText' of undefined

    起因 最近帮同事实现了一个小功能--复制文本到剪贴板,主要参考了前端大神阮一峰的博客,根据 navigator.clipboard 返回的 Clipboard 对象的方法 writeText() 写文 ...

  7. 测试平台系列(80) 封装Redis客户端

    大家好~我是米洛! 我正在从0到1打造一个开源的接口测试平台, 也在编写一套与之对应的完整教程,希望大家多多支持. 欢迎关注我的公众号测试开发坑货,获取最新文章教程! 回顾 上一节我们编写了Redis ...

  8. 学以致用 | Redis概念与简单实操

    Redis概念 Redis是一个由C语言编写.基于key-value存储结构的开源NoSQL数据库,其读写速度为10万次/秒,这个速度已经远远大于传统的关系型数据库. 使用场景 在高并发的情况下,可将 ...

  9. 【原创】【自制系列】自制stack类型(泛型)

    前言 自制类型的第三篇,stack类型.stack是指栈,其实我个人认为stack是最好写的类型,没有之一.关于queue类型需要涉及到循环队列避免浪费内存,但是stack的插入删除都是对于栈顶而言, ...

  10. python 内置模块续(二)

    目录 python 内置模块补充 1.hashlib模块 简易使用: 高级使用: 进阶使用: 加盐处理: 校验文件一致性 2.logging日志模块 日志等级 常用处理 "四大天王" ...