XML总结

XML是一种语法严格的储存数据的可扩展标记语言.

XML的基本语法

  • xml文档的后缀名为.xml
  • xml文档的第一行必须是文档声明
  • xml文档中的标签必须正确关闭.
  • xml文档严格区分大小写.

XML的组成部分

  • 文档声明

    • version:版本信息,最常用的是1.0版本.
    • standalone:是否独立 取值yes,不依赖其他文件,no依赖其他文件.
    • encoding:文件编码方式
  • 自定义标签

    • 标签可以由字母数字及其他字符组成,但不能以数字或者标点符号开头,不能包含字母XML,不能包含空格.
  • 属性

    • 属性值唯一
  • 文本

    • CDATA区,在该区的数据原样展示.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?xml version='1.0' ?>

<users>
<![CDATA[这是原样展示的文本]]>
<user id='1'>
<name>德玛西亚</name>
</user>

<user id='2'>
<name>诺克萨斯</name>
</user>

<user id='3'>
<name>弗雷尔卓德</name>
</user>

</users>

XML的约束

约束是规定XML文档文本规范方式的一种书写规则.

  • DTD约束
    • 内部DTD:将XML文件的约束规则定义在文本内部
    • 外部DTD:将XML的约束规则定义在外部的dtd格式文档,再在文件中引用.
    • 本地DTD:
    • 网络DTD:
  • Schema约束
    • 引入Schema约束:
      
        1.填写xml文档的根元素
        2.引入xsi前缀.  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        3.引入xsd文件命名空间.  xsi:schemaLocation="http://www.itcast.cn/xml  student.xsd"
        4.为每一个xsd约束声明一个前缀,作为标识  xmlns="http://www.itcast.cn/xml"
            * 因为如果文本需要引用多种约束时,每处使用的约束不同,需要在使用时区分.
      
1
2
3
         <students   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.itcast.cn/xml"
xsi:schemaLocation="http://www.itcast.cn/xml student.xsd">

解析XML文档

  • 解析xml的方式:
    1. DOM:将标记语言文档一次性加载进内存,在内存中形成一颗dom树
      • 优点:操作方便,可以对文档进行CRUD的所有操作
      • 缺点:占内存
    2. SAX:逐行读取,基于事件驱动的。(安卓/内存小的机器使用)
      • 优点:不占内存。
      • 缺点:只能读取,不能增删改
  • xml常见的解析器:
    1. JAXP:sun公司提供的解析器,支持dom和sax两种思想
    2. DOM4J:一款非常优秀的解析器
    3. Jsoup:jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。
    4. PULL:Android操作系统内置的解析器,sax方式的

      Jsoup方式解析XML文档

1.导入Jsoup jar包

2.添加到Module Library工作区域

3.开始引用

  • 获取XML文档路径
1
String XMLpath = Jsoup.class.getClassLoader().getResource("data.xml").getPath();
  • 获取Document对象,解析xml文件,加载进内存
    • parse()方法,解析文件方法
1
Document docu = org.jsoup.Jsoup.parse(new File(XMLpath),"utf-8");
  • 获取元素对象,该方法返回一个集合,集合内部是返回的元素.
1
Elements elements = document.getElementsByTag("name");
  • 获取元素的信息
    • text():获取元素信息,仅文本
      1
      String names = elms.text();

Jsoup对象的使用

  • Jsoup:工具类
  • Document:文档对象
    • getElementById(String id):根据ID属性值获取对象,在主栏中寻找
    • getElementsByTag(String tagName):根据标签名称获取元素对象,返回一个集合
    • getElementsByAttribute(String key):根据属性名称获取元素对象,返回一个集合.
    • getElementsByAttributeValue(String key, String value):根据对应的属性名和属性值获取元素对象,返回一个集合
1
2
3
<user id='1' >
<name>德玛西亚</name>
</user>
1
2
3
4
5
String XMLpath = Jsoup.class.getClassLoader().getResource("data.xml").getPath();
Document docu = org.jsoup.Jsoup.parse(new File(XMLpath),"utf-8");
Elements user = docu.getElementsByTag("name");
Element elementById = docu.getElementById("1");
Elements attribute = docu.getElementsByAttribute("id");
  • Element:元素对象
    • 获取子元素对象
      • getElementById(String id):根据id属性值获取唯一的element对象
      • getElementsByTag(String tagName):根据标签名称获取元素对象集合
      • getElementsByAttribute(String key):根据属性名称获取元素对象集合
      • getElementsByAttributeValue(String key, String value):根据对应的属性名和属性值获取元素对象集合
    • 获取属性值
      • String attr(String key):根据属性名称获取属性值
    • 获取文本内容
      • text():获取文本内容,仅文字
      • String html():获取html文本
  • Node:节点对象
    • 是Document和Element的父类

      快捷查询方式

      selector:选择器

  • 使用的方法:Elements select​(String cssQuery)
    • 语法:参考Selector类中定义的语法

      XPath

  • 获取student.xml的path
1
String XMLpath = Jsoup.class.getClassLoader().getResource("data.xml").getPath();
  • 获取Document对象
1
Document docu = org.jsoup.Jsoup.parse(new File(XMLpath),"utf-8");
  • 根据获取到的Document对象创建JXDocument对象
1
JXDocument jxDocument = new JXDocument(docu);

查询所有student标签

  • 查询主标签
1
List<JXNode> jxNodes = jxDocument.selN("//user");
  • 查询主标签下的标签
1
List<JXNode> jxNodes = jxDocument.selN("//user/name");
  • 查询主标签下的属性值(如id属性)
1
List<JXNode> jxNodes = jxDocument.selN("//user[@id]");
  • 总结:使用Xpath方式查询,主标签前两个斜杠,细分小标签再加一个斜杠,查询到属性时,加中括号,括号内写@属性名,具体查询时,再指定属性名=多少即可.