xml的概念和基础使用
什么是xml
xml是可扩展标记语言,简单理解,就是可预定义标签的编程语言。虽然和html类似,但主要是用于数据存储和传输数据;HTML用于显示数据。
XMl的结构:
<root> <!-- 根结点-->
<child> <!-- 子结点-->
<subchild> <!-- 根节点的孙子结点,子节点的子节点-->
.....
</subchild>
</child>
<child> <!-- 上一个child的兄弟结点-->
<subchild>
.....
</subchild>
</child>
</root>
XML的结构一定含有根节点/根元素,这个节点为所有节点的父节点
语法详解
- XML以<?xml version="1.0" encoding="ISO-8859-1"?>开头,这句话用于定义XML的版本和所采用的字符集。
- 标签以成对的方式出现,如:
- XML的大小写敏感
- 因为<>被用于当做语法标签的符号,所以文本的内容的< 号就失效了,所以我们使用 ;< 来表示小于号,使用;>表示大于号 ;&quto表示双引号
- 使用 < !-- 注释内容 – >
示例:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE books [
<!ELEMENT books (book*)>
<!ELEMENT book (name,author,price)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ATTLIST book id CDATA #REQUIRED>
]>
<books>
<book id="1001">
<name>java开发实战</name>
<author>张小三</author>
<price>98.5</price>
</book>
<book id="1002">
<name>mysql从删库到跑路</name>
<author>王一一</author>
<price>89.7</price>
</book>
</books>
找到这个xml文件,显示这样的形式就是没有问题的
案例解析
我们使用DTD验证去避免XML文件给出报错提示,去验证XML的有效性
<!DOCTYPE books [
<!ELEMENT books (book*)>
<!ELEMENT book (name,author,price)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ATTLIST book id CDATA #REQUIRED>
]>
PCDATA(Parsed Character DATA)的意思是:被解析的字符数据
CDATA(Unparsed Character Data)意思是:不应由 XML 解析器进行解析的文本数据
DTD的局限性
- 不遵守XML语法
- DTD数据类型有限
- DTD不可以扩展
- DTD不支持命名空间
DTD的代替技术 – Schema
Schema全称为XML Schema,用于描述XML文档结构,比DTD更加强大,最关键的特征就是,Schema支持数据类型
Schema特点
- 是用于支持XML验证
- 可以使用处理XML文档的工具进行操作
- 扩充了数据类型,可以自定义数据类型
- 支持元素的继承
- 支持属性组
格式
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
</xs:schema>
注意要点
- 所有的Schema文档使用schema作为根元素
- http://www.w3.org/2001/XMLSchema:用于验证当前 Schema 文档的命名空间(用于验证 Schema 本身)
同时它还规定了来 自命名空间http://www.w3.org/2001/XMLSchema的元素和数 据类型应该使用前缀 xs: - xmlns 相当于 java 中的 import, :xs“小名”,在使用时要写加 “小名”做前缀
使用Schema去验证XML文档的流程:
- 创建Schemafactory工厂
- 建立验证文件对象
- 利用SchemaFactory工厂对象,接收验证的文件对象,生成Schema对象
- 产生对此schema的验证器
- 要验证的数据
- 开始验证
示例代码
创建一个xsd文件,存放Schema
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="books">
<xs:complexType>
<xs:sequence>
<xs:element name="book" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"></xs:element>
<xs:element name="author" type="xs:string"></xs:element>
<xs:element name="price" type="xs:double"></xs:element>
</xs:sequence>
<xs:attribute name="id" type="xs:positiveInteger" use="required"></xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
在XML文件内引用xsd文件
<?xml version="1.0" encoding="UTF-8"?>
<books xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="{book.xsd}">
<book id="1001">
<name>java开发实战</name>
<author>张三</author>
<price>98.5</price>
</book>
<book id="1002">
<name>mysql开发</name>
<author>李四</author>
<price>89.7</price>
</book>
</books>
对验证器进行验证
package com.bjsxt.schema;
import java.io.File;
import java.io.IOException;
import javax.xml.transform.Source;
import javax.