目录
一、XML(可拓展标记语言)
1.学习网站:
-
标记语言:通过标签来描述数据的一门语言(标签有时我们也将其称之为元素)
-
可扩展:标签的名字是可以自定义的
2.作用
-
用于进行存储数据和传输数据
-
作为软件的配置文件
3.XML标签
-
标签由一对尖括号和合法标识符组成 < user >
-
标签必须成对出现< user >< user/>
-
特殊的标签可以不成对,但是必须有结束标记< user/ >
-
标签中可以定义属性,属性和标签名空格隔开属性值必须用引号(单/双)引起来< user id = “100”/>
-
标签需要正确的嵌套
4.XML语法
-
后缀名为.xml
-
文档声明必须是第一行第一列
<?xmlversion="1.0”encoding="UTF-8" standalone= “yes”?> 其中 version属性必须存在 encoding属性不是必须的,作用:打开当前xml文件的时候应该是使用什么字符编码表(默认都是UTF-8) standalone属性不是必须的,作用:描述XML文件是否依赖其他的xml文件,取值为yes/no
-
必须存在根标签
-
XML文件中可以定义注释信息
-
XML文件中可以存在以下特殊字符
<-----------------小于 >-----------------大于 &----------------和号(&) '---------------单引号 "---------------引号
-
XML可以存在CDATA区
<![CDATA[ ...内容...]]>
5.解析XML
(1)常见解析思想DOM
-
DOM(DocumentObject Model)文档对象模型:
就是把文档的各个组成部分看做成对应的对象,会把xmI文件全部加载到内存在内存中形成一个树形结构,再获取对应的值
其中DOM对象主要有以下部分
-
Document对象:整个xml文档
-
Element对象:所有标签
-
Attribute对象:所有属性
-
Text对象:所有文本内容
其中Element,Attribute,Text有一个共同的父类:Node对象
6.常见的解析工具
-
JAXP:SUN公司提供的一套XML的解析的API
-
JDOM:开源组织提供了一套XML的解析的API-jdom
-
DOM4J:开源组织提供了一套XML的解析的API-dom4j
-
pull :主要应用在Android手机端解析XML
7.DOM4j的使用
首先下载jar包
xml文件
<?xml version="1.0" encoding="utf-8" ?>
<books>
<book id="1">
<name>语文</name>
<versions>人教版</versions>
</book>
<book id="2">
<name>数学</name>
<versions>人教版</versions>
</book>
<book id="3">
<name>数学</name>
<versions>苏教版</versions>
</book>
<user id="1">
<name>小明</name>
<studentID>1235354</studentID>
</user>
</books>
需求:
-
解析这个xmI文件
-
将解析到的Book标签数据封装到Book对象中并将其存储到ArrayList集合中
-
遍历集合
解析类:
public class Analysis {
public Document parseUrl(String url) throws DocumentException {
SAXReader reader = new SAXReader();
return reader.read(url);
}
public Document parseUrl(File file) throws DocumentException {
SAXReader reader = new SAXReader();
return reader.read(file);
}
}
Book类
public class Book {
private String name;
private String version;
private Long id;
public Book() {
}
public Book(String name, String version, Long id) {
this.name = name;
this.version = version;
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@Override
public String toString() {
return "Book{" +
"name='" + name + ''' +
", version='" + version + ''' +
", id=" + id +
'}';
}
}
测试类
public class Application {
public static void main(String[] args) throws DocumentException {
File file = new File("reflection\src\xml\bookstores.xml");
Analysis analysis = new Analysis();
Document document = analysis.parseUrl(file);
//获取根标签
Element rootElement = document.getRootElement();
//通过根标签获取book标签
//无参elements()获取所有子标签
List<Element> elements = rootElement.elements();
System.out.println(elements.size());
elements.forEach(book -> {
System.out.println(book.getName());
});
//有参elements(标签名)可以获取所有的指定子标签
List<Element> books = rootElement.elements("book");
System.out.println(books.size());
books.forEach(book -> {
System.out.println("=====================================");
//获取属性对应的属性值
System.out.println(book.attribute("id").getValue());
//获取该标签下的子标签
book.elements("name").forEach(name -> {
//获取标签体的内容
System.out.println(name.getText());
});
book.elements("version").forEach(v -> {
//获取标签体的内容
System.out.println(v.getText());
});
});
System.out.println("------------------------------------");
//准备封装
ArrayList<Book> bookArrayList = new ArrayList<>();
books.forEach(book -> {
Book book1 = new Book(book.element("name").getText(),
book.element("version").getText(),
Long.valueOf(book.attribute("id").getValue()));
System.out.println(book1);
bookArrayList.add(book1);
});
//最后检查"
System.out.println("+++++++++++++++++++++++++++++++++++++++++++++++++++++");
bookArrayList.forEach(book -> System.out.println(book.toString()));
}
}
8.文档约束
(1)概述
用来限定xml文件中可使用的标签以及属性
(2)分类
-
DTD
-
schema
(3)DTD约束
-
创建一个文件,后缀名为.dtd
-
看xml文件中使用了哪些元素(<!ELEMENT>可以定义元素)
-
判断元素是简单元素还是复杂元素
-
简单元素:没有子元素
-
复杂元素:有子元素的
-
xml文件:下面的约束文档的xml内容
<?xml version="1.0" encoding="utf-8" ?>
<books>
<book id="1">
<name>语文</name>
<versions>人教版</versions>
</book>
<book id="2">
<name>数学</name>
<versions>人教版</versions>
</book>
<book id="3">
<name>数学</name>
<versions>苏教版</versions>
</book>
</books>
需要掌握:
-
能在xml文件中引入dtd约束文档
-
能够简单阅读约束文档
-
能根据约束文档写xml文件
(4)引入DTD约束
方式一:引入本地dtd
<?xml version="1.0" encoding="utf-8" ?>
<!--在xml文件中的第二行写入 <!DOCTYPE 根标签名字 SYSTEM(表示引入本地DTD) ‘DTD文件路径’>-->
<!DOCTYPE books SYSTEM 'restrain.dtd'>
方式二:在xml文件内部引入
<?xml version="1.0" encoding="utf-8" ?>
<!--在xml文件中的第二行写入 <!DOCTYPE 根标签名字 [](表示内部引入dtd,[]内写约束内容)>-->
<!DOCTYPE books [] >
方式三:引入网络dtd
<?xml version="1.0" encoding="utf-8" ?>
<!--在xml文件中的第二行写入 <!DOCTYPE 根标签名字 PUBLIC(表示引入网络DTD) “dtd文件名” “dtd文档的url”>-->
<!DOCTYPE books PUBLIC “dtd文件名” “dtd文档的url”>
(5)DTD语法
①定义元素
<!ELEMENT元素名 元素类型>
-
简单元素
-
EMPTY:表示标签体为空
-
ANY:表示标签体可以为空也可以不为空
-
PCDATA:表示该元素的内容部分为字符串
-
-
复杂元素
-
直接写子元素名称。
-
多个子元素可以使用”,“或者 ”|” 隔开;
-
” , “:表示定义子元素的顺序
-
”|”: 表示子元素只能出现任意一个
-
“?“:零次或一次
-
” + “:一次或多次
-
” * “:零次或多次;
-
如果不写则表示出现一次
-
-
-
②定义属性
<!ATTLIST 元素名称 属性名称 属性的类型 属性的约束>
-
属性的类型
-
CDATA类型:普通的字符串
-
-
属性的约束:
-
#REQUIRED:属性是必须的
-
#IMPLIED:属性不是必需的
-
#FIXED value:属性值是固定的value值
-
DTD约束文件
<!--复杂元素-->
<!ELEMENT books (book+)>
<!ELEMENT book (name,version)>
<!--简单元素-->
<!ELEMENT name (#PCDATA)>
<!ELEMENT version (#PCDATA)>
<!--定义属性-->
<!ATTLIST book id #PCDATA #IMPLIED>
(6)schema约束
①定义元素
-
创建一个文件,后缀名为.xsd
-
定义文档声明
-
schema文件的根标签为:< schema>
-
在< schema>中定义属性:xmIns=XML Schema
-
在根标签中定义属性:targetNamespace =唯一的url地址,用来指定当前这个schema文件的名称空间
-
在根标签定义属性:elementFormDefault=”qualified,表示当前schema文件是一个质量良好的文件
-
通过element定义元素
-
判断当前元素是简单元素还是复杂元素
②定义属性
属性名 属性类型 属性的约束【required(必须的),optional(可选的)】
<attribute name="id" type="string"use="required"></attribute>
(7)引入schema约束
-
在根标签定义属性:xmIns=”http://www.w3.org/2001/XMLSchema-instance
-
通过xmIns引入约束文件的名称空间
-
给某一个xmins属性添加一个标识,用于区分不同的名称空间,格式为:xmins:标识=“名称空间地址”,标识可以是任意的,但是一般取值都是xsi
-
通过xsi:schemaLocation指定名称空间所对应的约束文件,路径格式为:父 si:schemaLocation =”名称空间url 文件路径“
<books xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="www.book_schema.cn"
xsi:shemaLocation="www.book_shema.cn book_shema.xad"
>
根据上面xml写一个xsd文件
<?xml version="1.0" encoding="UTF-8" ?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="www.book_schema.cn"
elementFormDefault="qualified">
<!-- element name = "根标签名"-->
<element name="books">
<!-- complexType表示当前标签是复杂的元素-->
<complexType>
<sequence>
<!-- 定义book复杂元素,maxOccurs:该标签最多出现的次数,unbounded是无限制-->
<element name="book" maxOccurs="unbounded">
<complexType>
<sequence>
<!-- 定义简单元素-->
<element name="name" type="string"/>
<element name="version" type="string"/>
</sequence>
<attribute name="id" type="string" use="required"></attribute>
</complexType>
</element>
</sequence>
</complexType>
</element>
</schema>
(8)schema和DTD约束的区别
-
schema约束文件也是一个xml文件,符合xm的语法,这个文件的后缀名.xsd
-
一个xml中可以引用多个schema约束文件,多个schema使用名称空间区分(名称空间类似于java包名)
-
dtd里面元素类型的取值比较单一常见的是PCDATA类型,但是在schema里面可以支持很多个数据类型
-
schema语法更加的复杂
原文地址:https://blog.csdn.net/qq_33627452/article/details/135834288
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_62585.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!