|
1.XML基本概述
- XML的全称为(EXtensible Markup Language),是一种可扩展的标记语言 标记语言: 通过标签来描述数据的一 门语言(标签有时我们也将其称之为元素) 可扩展:标签的名字是可以自定义的,XML文件是由很多标签组成的, 而标签名是可以自定义的。
- 作用:配置文件、数据传输
- 优势:可读性好、可维护性高
2.XML入门案例
<?xml version=&#34;1.0&#34; encoding=&#34;utf-8&#34; ?>
<students>
<student id=&#34;1001&#34;>
<name>张三丰</name>
<age>11</age>
</student>
<student id=&#34;1002&#34;>
<name>张无忌</name>
<age>11</age>
</student>
</students>解释:
- <?xml version=&#34;1.0&#34; encoding=&#34;utf-8&#34; ?> : 文档声明方式,每个xml文件的第一个语句都是改语法。
- <students></students>:是xml文档的根节点
- <student></student> : 子元素
- id = &#34;1001&#34; : 属性值
3.XML标签语法规制
- 标签是由一对尖括号和自定义标签名称组成
- 标签必须成对存在
- 特殊的标签可以单个存在,但是必须加结束符/
- 标签可以有属性,多个属性之间用空格隔开,属性值必须用双引号引起
- 标签可以嵌套使用。
<?xml version=&#34;1.0&#34; encoding=&#34;utf-8&#34; ?>
<students>
<student id=&#34;1001&#34;>
<name>张三丰</name>
<age>11</age>
</student>
<student id=&#34;1002&#34;>
<name>张无忌</name>
<age>11</age>
</student>
</students>4.DTD约束
文档类型定义(DTD)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。
DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。
4.1 DTD声明格式
内嵌式声明 : 就是将语法声明在XML文档中。
<!DOCTYPE 根元素 [元素声明]>外联式 : 创建一个.dtd文件通过语法进行引入
1.引入本地dtd
<!DOCTYPE 根元素名称 SYSTEM ‘DTD文件的路径&#39;>
2.在xml文件内部引入
<!DOCTYPE 根元素名称 [ dtd文件内容 ]>
3.引入网络dtd
<!DOCTYPE 根元素的名称 PUBLIC &#34;DTD文件名称&#34; &#34;DTD文档的URL&#34;>4.2 DTD元素
语法格式
1.基本语法
<!ELEMENT 元素名称 类别>
<!ELEMENT 元素名称 (元素内容)>
2.生命一个空元素
<!ELEMENT 元素名称 EMPTY>
3.声明一个pcdata的元素
<!ELEMENT 元素名称 (#PCDATA)>
4.声明一个元素可以式任意
<!ELEMENT 元素名称 ANY>
5.声明一个只能有一个子元素的元素
<!ELEMENT 元素名称 (子元素名称 1)>
6.声明一个可以式1个或多个子元素的元素
<!ELEMENT 元素名称 (子元素名称+)>
7.声明一个可以是0个或是多个子元素
<!ELEMENT 元素名称 (子元素名称*)>代码示例
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>4.3 DTD声明属性
<!ATTLIST 元素名称 属性名称 属性类型 默认值>可选元素
类型 | 描述 | CDATA | 值为字符数据 (character data) | (en1|en2|..) | 此值是枚举列表中的一个值 | ID | 值为唯一的 id | IDREF | 值为另外一个元素的 id | IDREFS | 值为其他 id 的列表 | NMTOKEN | 值为合法的 XML 名称 | NMTOKENS | 值为合法的 XML 名称的列表 | ENTITY | 值是一个实体 | ENTITIES | 值是一个实体列表 | NOTATION | 此值是符号的名称 | xml: | 值是一个预定义的 XML 值 | 默认值参数可使用下列值:
值 | 解释 | 值 | 属性的默认值 | #REQUIRED | 属性值是必需的 | #IMPLIED | 属性不是必需的 | #FIXED value | 属性值是固定的 | 代码测试
<!ELEMENT square EMPTY>
<!ATTLIST square width CDATA &#34;0&#34;>4.4 DTD实体定义
语法格式
<!ENTITY 实体名称 &#34;实体的值&#34;>代码测试
<!ENTITY writer &#34;Bill Gates&#34;>
<!ENTITY copyright &#34;Copyright W3School.com.cn&#34;>4.4 代码演示 :
<?xml version=&#34;1.0&#34; encoding=&#34;utf-8&#34; ?>
<!DOCTYPE students [
<!ELEMENT students (student*)>
<!ELEMENT student (id,name,age)>
<!ELEMENT id (#PCDATA)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
]>
<students>
<student>
<id>1001</id>
<name>张三丰</name>
<age>11</age>
</student>
<student>
<id>1002</id>
<name>张无忌</name>
<age>12</age>
</student>
</students>5.Schema约束
XML Schema 是基于 XML 的 DTD 替代者。
XML Schema 可描述 XML 文档的结构。
XML Schema 语言也可作为 XSD(XML Schema Definition)来引用。
5.1 Schema简介
Schema的用处:
- 定义可出现在文档中的元素
- 定义可出现在文档中的属性
- 定义哪个元素是子元素
- 定义子元素的次序
- 定义子元素的数目
- 定义元素是否为空,或者是否可包含文本
- 定义元素和属性的数据类型
- 定义元素和属性的默认值以及固定值
为什么使用Schema
- 支持数据类型
- 不必学习新的语言
- 可使用 XML 编辑器来编辑 Schema 文件
- 可使用 XML 解析器来解析 Schema 文件
- 可通过 XML DOM 来处理 Schema
- 可通过 XSLT 来转换 Schema
5.2 schema根元素
<xs:schema xmlns:xs=&#34;http://www.w3.org/2001/XMLSchema&#34;
targetNamespace=&#34;http://www.w3school.com.cn&#34;
xmlns=&#34;http://www.w3school.com.cn&#34;
elementFormDefault=&#34;qualified&#34;>
...
...
</xs:schema>片段解释
片段一:
xmlns:xs=&#34;http://www.w3.org/2001/XMLSchema&#34;显示 schema 中用到的元素和数据类型来自命名空间 &#34;http://www.w3.org/2001/XMLSchema&#34;。同时它还规定了来自命名空间 &#34;http://www.w3.org/2001/XMLSchema&#34; 的元素和数据类型应该使用前缀 xs:
片段二
targetNamespace=&#34;http://www.w3school.com.cn&#34; 显示被此 schema 定义的元素 (note, to, from, heading, body) 来自命名空间: &#34;http://www.w3school.com.cn&#34;。 片段三
xmlns=&#34;http://www.w3school.com.cn&#34; 指出默认的命名空间是 &#34;http://www.w3school.com.cn&#34;。
片段四
elementFormDefault=&#34;qualified&#34; 出任何 XML 实例文档所使用的且在此 schema 中声明过的元素必须被命名空间限定。
5.3 简单元素类型
简易元素指那些仅包含文本的元素。它不会包含任何其他的元素或属性。
不过,“仅包含文本”这个限定却很容易造成误解。文本有很多类型。它可以是 XML Schema 定义中包括的类型中的一种(布尔、字符串、数据等等),或者它也可以是您自行定义的定制类型。
您也可向数据类型添加限定(即 facets),以此来限制它的内容,或者您可以要求数据匹配某种特定的模式。
元素定义
<xs:element name=&#34;xxx&#34; type=&#34;yyy&#34;/>
<!--
此处 xxx 指元素的名称,yyy 指元素的数据类型。
最常用的类型是:
xs:string
xs:decimal
xs:integer
xs:boolean
xs:date
xs:time
-->属性的定义
<xs:attribute name=&#34;xxx&#34; type=&#34;yyy&#34;/>
<!--
在此处,xxx 指属性名称,yyy 则规定属性的数据类型。
最常用的类型是:
xs:string
xs:decimal
xs:integer
xs:boolean
xs:date
xs:time
-->限定
<!--对值的限定-->
<xs:simpleType>
<xs:restriction base=&#34;xs:数据类型&#34;>
<xs:minInclusive value=&#34;限定值&#34;/>
<xs:maxInclusive value=&#34;限定值&#34;/>
</xs:restriction>
</xs:simpleType>
<!--对一组值的限定-->
<xs:simpleType>
<xs:restriction base=&#34;xs:数据类型&#34;>
<xs:enumeration value=&#34;值1&#34;/>
<xs:enumeration value=&#34;值2&#34;/>
....
<xs:enumeration value=&#34;值n&#34;/>
</xs:restriction>
</xs:simpleType>
<!--对一系列值的限定-->
<xs:simpleType>
<xs:restriction base=&#34;xs:string&#34;>
<xs:pattern value=&#34;[a-z]&#34;/>
</xs:restriction>
</xs:simpleType>
<!--对一系列值的其他限定-->
<xs:simpleType>
<xs:restriction base=&#34;xs:string&#34;>
<xs:pattern value=&#34;([a-z])*&#34;/>
</xs:restriction>
</xs:simpleType>5.4 复杂元素类型
实际上就是元素指包含其他元素及/或属性的 XML 元素。
定义格式:
<xs:element>
<xs:complexType>
<xs:sequence>
<xs:element name=&#34;属性名&#34; type=&#34;xs:类型&#34;/>
<xs:element name=&#34;属性名&#34; type=&#34;xs:类型&#34;/>
...
</xs:sequence>
</xs:complexType>
</xs:element>实际案例
<?xml version=&#34;1.0&#34; encoding=&#34;ISO-8859-1&#34;?>
<shiporder orderid=&#34;889923&#34;
xmlns:xsi=&#34;http://www.w3.org/2001/XMLSchema-instance&#34;
xsi:noNamespaceSchemaLocation=&#34;shiporder.xsd&#34;>
<orderperson>George Bush</orderperson>
<shipto>
<name>John Adams</name>
<address>Oxford Street</address>
<city>London</city>
<country>UK</country>
</shipto>
<item>
<title>Empire Burlesque</title>
<note>Special Edition</note>
<quantity>1</quantity>
<price>10.90</price>
</item>
<item>
<title>Hide your heart</title>
<quantity>1</quantity>
<price>9.90</price>
</item>
</shiporder>shiporder.xsd
<?xml version=&#34;1.0&#34; encoding=&#34;ISO-8859-1&#34; ?>
<xs:schema xmlns:xs=&#34;http://www.w3.org/2001/XMLSchema&#34;>
<xs:element name=&#34;shiporder&#34;>
<xs:complexType>
<xs:sequence>
<xs:element name=&#34;orderperson&#34; type=&#34;xs:string&#34;/>
<xs:element name=&#34;shipto&#34;>
<xs:complexType>
<xs:sequence>
<xs:element name=&#34;name&#34; type=&#34;xs:string&#34;/>
<xs:element name=&#34;address&#34; type=&#34;xs:string&#34;/>
<xs:element name=&#34;city&#34; type=&#34;xs:string&#34;/>
<xs:element name=&#34;country&#34; type=&#34;xs:string&#34;/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name=&#34;item&#34; maxOccurs=&#34;unbounded&#34;>
<xs:complexType>
<xs:sequence>
<xs:element name=&#34;title&#34; type=&#34;xs:string&#34;/>
<xs:element name=&#34;note&#34; type=&#34;xs:string&#34; minOccurs=&#34;0&#34;/>
<xs:element name=&#34;quantity&#34; type=&#34;xs:positiveInteger&#34;/>
<xs:element name=&#34;price&#34; type=&#34;xs:decimal&#34;/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name=&#34;orderid&#34; type=&#34;xs:string&#34; use=&#34;required&#34;/>
</xs:complexType>
</xs:element>
</xs:schema>6.Dom4j解析xml文件
6.1 概述
所有现代浏览器都内建了用于读取和操作 XML 的 XML 解析器。
解析器把 XML 读入内存,并把它转换为可被 JavaScript 访问的 XML DOM 对象。
微软的 XML 解析器与其他浏览器中的解析器是有差异的。微软的解析器支持对 XML 文件和 XML 字符串(文本)的加载,而其他浏览器使用单独的解析器。不过,所有的解析器都含有遍历 XML 树、访问、插入及删除节点的函数。
在Java中通过Dom4j的工具,来对XML进行解析
6.2 Dom4j的基本使用
开发步骤:
- 导入Dom4j的jar包
- 创建解析对象 --- 》SAXReader
- 创建文档对象----》Document
- 创建根节点元素对象 ----》Element
- 获取子节点的的所有对象 ----》List<Element>
- 获取每个节点元素的文本
代码演示
public class Demo01 {
public static void main(String[] args) {
try {
//1,创建解析对象
SAXReader saxReader = new SAXReader();
//2,获取文档对象
Document document = saxReader.read(&#34;students.xml&#34;);
//3,获取根节点对象
Element rootElement = document.getRootElement();
//4,获取根节点中所有子节点对象
List<Element> elements = rootElement.elements();
for (Element element : elements) {
//获取子节点中的文本
String name = element.elementText(&#34;name&#34;);
String age = element.elementText(&#34;age&#34;);
System.out.println(name+&#34;,&#34;+age);
}
} catch (DocumentException e) {
e.printStackTrace();
}
}
} |
|