xml(可扩张标志语言)
xml应用分类
- 应用于客户需要与不同数据源进行交互
- 应用于将大量运算负荷分布在客户端
- 应用于将同一数据以不同的面貌展现给不同的用户
- 应用与内容与配置管理
xml只用元素和属性来描述数据,而怒提供数据的显示方法
xml的基本结构
xml即一个以.xml为后缀的文件,包括:
- xml声明
- xml元素描述
<?xml version="1.0" encoding="utf-8" ?>
<books>
<book>
<name>Java</name>
<author>zhang san</author>
</book>
<book>
<name>C#</name>
<author>li si</author>
</book>
</books>
- xml声明
版本声明: | <?xml version="1.0"?> |
---|---|
编码声明: | <?xml version="1.0" encoding="utf-8" ?> |
独立声明: | <?xml version="1.0" encoding="utf-8" standalone="yes"?> |
版本声明: version : 解析这个xml的时候,使用什么版本的解析器解析
编码声明:encoding : 解析xml中的文字的时候,使用什么编码来翻译(utf-8,gbk,gb2312)
独立声明:standalone : no - 该文档会依赖关联其他文档 , yes-- 这是一个独立的文档
- xml元素
xml元素命名规则
名称可以含字母、数字以及其他的字符
名称不能以数字或者标点符号开始
名称不能以字符 “xml”(或者 XML、Xml)开始
名称不能包含空格
可使用任何名称,无保留的字词
* 好名称应具有描述性,能见名知意 - CDATA
由于xml解释器通常会解释xml文档中的所有文本。非法字符【“<”、"&"】而省略号、引号和大于号是合法,但把他们替换为实体引用是个好习惯
< | < 小于 |
---|---|
> | > 大于 |
& | & 和号 |
&apos | ’ 省略号 |
" | " 引号 |
如不希望文本被解释器解释,则可以将文本放在CDATA标志中
CDATA:以“<![CDATA[” 开始,以 “]]>”结束
<ah> <![CDATA[<a href="http://www.baidu.com">百度一下</a>]]> </ah>
*CDATA的“]]>”结束部分不包含空格或拆行
- xml注释
<!-- 这里是注释内容 -->
xml的注释,不允许放置在文档的第一行。 必须在文档声明的下面。
DTD与XML Schema
- DTD[Document Type Definition]用来定义xml文档结构,包括:
元素的定义规则
元素间关系的定义规则
元素可使用的属性
可使用的实体或符号规则
DTD在xml文档内声明
<!DOCTYPE 根元素 [元素声明]>
带有 DTD 的 XML 文档实例
<?xml version="1.0"?>
<!DOCTYPE books [
<!ELEMENT books (book)>
<!ELEMENT book (name,author)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT author (#PCDATA)>
]>
<books>
<book>
<name>Java</name>
<author>zhang san</author>
</book>
</books>
<!ELEMENT books (book)>:books下有只有一个元素book。 <!ELEMENT book (name,author)>:book下有两个元素name,author且顺序必为name - author
元素的个数:
+:一个或多个
*:零个或多个
?:零个或一个
属性的类型定义
CDATA : 属性是普通文字
ID : 属性的值必须唯一
<!ELEMENT stu (name , age)> 按照顺序来
<!ELEMENT stu (name | age)> 两个中只能包含一个子元素
PCDATA即被解析的字符数据(parsed character data)。
PCDATA 是会被解析器解析的文本。这些文本将被解析器检查实体以及标记。
CDATA 即字符数据(character data)。
CDATA 是不会被解析器解析的文本。在这些文本中的标签不会被当作标记来对待,其中的实体也不会被展开。
- XML Schema
XML Schema:
– 定义可出现在文档中的元素
– 定义可出现在文档中的属性
– 定义哪个元素是子元素
– 定义子元素的次序
– 定义子元素的数目
– 定义元素是否为空,或者是否可包含文本
– 定义元素和属性的数据类型
– 定义元素和属性的默认值以及固定值
<?xml version="1.0"?>
<!-- xmlns :xml namespace:命名空间
targetNamespace:目标命名空间
elementFormDefault:元素格式化情况
-->
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.org/book"
elementFormDefault="qualified">
<element name="book">
<complexType>
<sequence>
<element name="name" type="xs:string"/>
<element name="author" type="xs:string"/>
</sequence>
</complexType>
</element>
</schema>
<?xml version="1.0"?>
<!-- xmlns :xml namespace:命名空间
targetNamespace:目标命名空间
elementFormDefault:元素格式化情况
-->
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.org/book"
elementFormDefault="qualified">
<element name="books">
<complexType>
<sequence>
<element name="book">
<complexType>
<sequence>
<element name="name" type="xs:string"/>
<element name="author" type="xs:string"/>
</sequence>
</complexType>
</element>
</sequence>
</complexType>
</element>
</schema>
Java解释xml
- DOM(文档对象模型)
需要对文件进行修改
需要对文件进行随机修改 - SAX <事件驱动的>
对大型文件进行处理
只需修改文件夹部分内容,或只需从文件中得到特定信息
想建立自己的对象模型
###Dom4j 基本用法
element.element("book") : 返回该元素下的第一个book元素
element.elements(); 返回该元素下的所有子元素。
-
创建SaxReader对象
-
指定解析的xml
-
获取根元素。
-
根据根元素获取子元素或者下面的子孙元素
try { //1. 创建sax读取对象 SAXReader reader = new SAXReader(); //jdbc -- classloader //2. 指定解析的xml源 Document document = reader.read(new File("src/xml/books.xml")); //3. 得到元素、 //得到根元素 Element rootElement= document.getRootElement(); //获取根元素下面的子元素 author //rootElement.element("author") //System.out.println(rootElement.element("book").element("author").getText()); //获取根元素下面的所有子元素 。 book元素 List<Element> elements = rootElement.elements(); //遍历所有的book元素 for (Element element : elements) { //获取stu元素下面的name元素 String name = element.element("name").getText(); String age = element.element("author").getText(); System.out.println("name="+name+"==author+"+author); } } catch (Exception e) { e.printStackTrace(); }