您的位置 首页 java

XML、XML约束、XML解析、常用的xml解析器(DOM4J)、XPATH

XML的简介

定义

HTML:超文本标记语言

XML:eXtensible Markup Language 可扩展标记语言 version=”1.0″

  • 可扩展:所有的标签都是自定义的。
  • 功能:数据存储
  • 配置文件(最主要的使用场景)
  • 数据传输(一般不使用xml做数据传输,而使用json代替)

html与xml区别:

  • html语法松散,xml语法严格
  • html做页面展示,xml做数据存储
  • html所有标签都是预先定义好的,xml所有标签都是自定义的

xml语法

文档声明:

  • 必须写在xml文档的第一行。
  • 写法:
  • ​ <?xml version=”1.0″ ?>
  • 属性:
  • version:版本号 固定值 1.0
  • encoding:指定文档的码表。默认值为 iso-8859-1
  • standalone:指定文档是否独立 yes 或 no,是否受其他文件约束 ,
  • ​ yes – 不受其他文件约束; no – 受其他文件约束
  • 跟约束文件相关的

元素:xml文档中的标签

  • 文档中必须有且只能有一个根元素(根标签)
  • 标签需要正确闭合。 <student/> 或<name> </name>
  • 标签需要正确嵌套
  • 标签名称要遵守:
  • 标签名称区分大小写
  • 标签名不能以数字开头

文本:

  • 转义字符:> &gt ; < &lt ;
  • CDATA : 中括号内的数据会原样显示
  • <![CDATA[ 数据内容 ]]>

属性:

  • 属性值必须用引号引起来。单双引号都可以

注释:

<!-- -->
 

xml约束(了解):

定义

约束就是xml的书写规则

约束的分类:

dtd (约束力度不够,现在基本不使用):

dtd分类:
* 内部dtd:在xml内部定义dtd
* 外部dtd:在外部文件中定义dtd
* 本地dtd文件:<!DOCTYPE students SYSTEM "student.dtd">
* 网络dtd文件:<!DOCTYPE students PUBLIC "名称空间" "student.dtd">
<!ELEMENT students (student*) > : 表示students标签中可以有0-n个student标签
<!ELEMENT student (name,age,sex)> : 表示student标签中必须有name,age,sex并且顺序要按这个来
<!ELEMENT student (name age sex)> : 表示student标签中可以有name,age,sex
<!ELEMENT student (name|age|sex)> : 表示student标签中只能有name,age,sex三个中的一个
 

schema(了解):

导入 xsd 约束文档:
1、编写根标签
2、引入实例名称空间 xmlns:xsi=""
3、引入名称空间 xsi:schemaLocation=" student.xsd"
4、引入默认的名称空间
 

XML解析(重点)

解析xml的目的

  • Java 代码读取xml中的数据 (最重要的)
  • 用Java代码往xml中写入数据 ( 几乎用不到,只会出现在数据传输中,而数据传输基本不会使用xml 而使用 json )

xml的解析思路(了解)

dom :将文档加载进内存,形成一颗dom树( document对象 ) ,将文档的各个组成部分封装为一些对象。

  • 优点:在内存中会形成dom树,写代码就非常方便,可以对dom树进行增删改查。
  • 缺点:dom树 非常占内存,解析速度慢。

SAX:逐行读取,基于事件驱动

  • 优点:不占内存,解析速度快
  • 缺点:只能读取,不能回写,而且使用不方便

常用的xml解析器

JAXP: sun公司 提供的解析。支持dom和sax。(不常用)

JDOM(后来分裂了)

DOM4J(document for java 民间组织开发的,但是它是事实方式。非常好。 支持dom)

关键是获取标签,只要标签获取到了,那么通过 attribute() 方法能获取 属性对象,通过 getText()方法能获取标签中的文本,通过 getName() 方法获取标签名

接下来的关键是:怎么获取标签。有两种方法: 迭代器, elements(), element (“标签名”)

步骤:

  • 1.导入jar包 dom4j.jar
  • 2.创建解析器 SAXReader reader = new SAXReader();
  • 3.解析xml 获得 document 对象 Document document = reader.read( url ); 获取根节点 Element root = documen.getRootElement()

关于DOM4J解析的总结:

1.获取标签

​ 1.1 迭代器 (比较麻烦)

​ 1.2 elements() 获取所有子标签 elements(“标签名”) 获取指定标签名的子标签

2.获取文本

getText()

3.获取属性

attributes() 获取所有属性 获取的是Attribute对象的集合

attribute(“属性名”) 获取对应属性名的一个属性 获取的是 Attribute 对象

​ 使用attribute对象 获取属性值 : getValue()

XPATH (属于DOM4J中的,用于查询特定的节点)

  • 定义了一种规则。
  • 使用的方法:
  • selectSingleNode():
  • selectNodes():
  • 步骤:
  • 1、注意:导包: jaxen…jar
  • 2、 创建解析器 SAXReader reader = new SAXReader();
  • 3、解析xml 获得 document 对象 Document document = reader.read(url);

文章来源:智云一二三科技

文章标题:XML、XML约束、XML解析、常用的xml解析器(DOM4J)、XPATH

文章地址:https://www.zhihuclub.com/185195.shtml

关于作者: 智云科技

热门文章

发表回复

您的电子邮箱地址不会被公开。

网站地图