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. 72.Financial Management

    描述 Larry graduated this year and finally has a job. He's making a lot of money, but somehow never se ...

  2. Python基础(API接口测试)

    import flask,json,pymysql from flask import request, jsonify, Response from datetime import datetime ...

  3. Java设计模式之(二)——工厂模式

    1.什么是工厂模式 Define an interface for creating an object,but let subclasses decide which class toinstant ...

  4. [loj3278]收获

    人的移动之间会相互影响,因此不妨看成果树逆时针移动,显然果树之间独立 考虑建图:1.每一棵果树向其逆时针旋转后第一个人连边:2.每一个人向其逆时针旋转不小于$C$的第一个人连边(即下一个摘的人),边权 ...

  5. 异常处理截止和UML图

    0.异常处理机制 0.1.java中异常的作用是:增强程序健壮性. 0.2.java中异常以类和对象的形式存在. 1.java的异常处理机制 1.1.异常在java中以类和对象的形式存在.那么异常的继 ...

  6. html+css第六篇-定位

    relative相对定位/定位偏移量 position:relative; 相对定位 a.不影响元素本身的特性: b.不使元素脱离文档流: c.如果没有定位偏移量,对元素本身没有任何影响: 定位元素位 ...

  7. .NET Core 3.0 JsonSerializer.Deserialize 返回dynamic类型对象

    .NET Core 3.0 JsonSerializer.Deserialize to dynamic object 因为官方还不支持返回动态类型的对象,只能自己手写一个,临时测试了下没问题,还有些地 ...

  8. Atcoder Grand Contest 020 E - Encoding Subsets(记忆化搜索+复杂度分析)

    Atcoder 题面传送门 & 洛谷题面传送门 首先先考虑如果没有什么子集的限制怎样计算方案数.明显就是一个区间 \(dp\),这个恰好一年前就做过类似的题目了.我们设 \(f_{l,r}\) ...

  9. bzoj4036 / P3175 [HAOI2015]按位或

    bzoj4036 / P3175 [HAOI2015]按位或 是一个 min-max容斥 的板子题. min-max容斥 式子: $ \displaystyle max(S) = \sum_{T\su ...

  10. mingling

    mysql> USE mon Reading table information for completion of table and column names You can turn of ...