目录
XML 指可扩展标记语言(EXtensible Markup Language)。
XML 是一种很像HTML的标记语言。
XML 的设计宗旨是传输数据,而不是显示数据。
XML 标签没有被预定义。您需要自行定义标签。
XML 被设计为具有自我描述性。
XML 是 W3C 的推荐标准。
XML不是HTML的替代,XML被设计是用来传输和存储数据的,其重点是数据的内容。
而HTML被设计是用来显示数据的,其重点是数据的外观样式。
XML 是独立于软件和硬件的信息传输工具
通常会把xml当作一个配置文件去使用。(在Spring Struts Hibernate Springmvc Mybatis等框架中作为配置文件)。
标签没有在任何 XML 标准中定义过(比如
和 )。这些标签是由 XML 文档的创作者发明的。XML 语言没有预定义的标签。HTML 中使用的标签都是预定义的。HTML 文档只能使用在 HTML 标准中定义过的标签(如 、
等等)。XML 允许创作者定义自己的标签和自己的文档结构。
XML 元素必须遵循以下命名规则:
1、名称可以包含字母、数字以及其他的字符。
2、名称不能以数字或者标点符号开始。
3、名称不能以字母 xml(或者 XML、Xml 等等)开始。
4、名称不能包含空格。
5、可使用任何名称,没有保留的字词。
最佳命名习惯
使名称具有描述性。使用下划线的名称也很不错:
名称应简短和简单,比如:
避免 "-" 字符。如果您按照这样的方式进行命名:"first-name",一些软件会认为您想要从 first 里边减去 name。
避免 "." 字符。如果您按照这样的方式进行命名:"first.name",一些软件会认为 "name" 是对象 "first" 的属性。
避免 ":" 字符。冒号会被转换为命名空间来使用(稍后介绍)。
XML 文档经常有一个对应的数据库,其中的字段会对应 XML 文档中的元素。有一个实用的经验,即使用数据库的命名规则来命名 XML 文档中的元素。
在 XML 中,éòá 等非英语字母是完全合法的,不过需要留意,您的软件供应商不支持这些字符时可能出现的问题。
XML 声明文件的可选部分,如果存在需要放在文档的第一行,如下所示:
XML 元素指的是从(且包括)开始标签直到(且包括)结束标签的部分。
- 写法:<标签名>
- 在xml中,同样的去区分单标签和双标签
- 单标签 :<标签名 />
- 双标签:<标签名> 内容(文本,其他标签) 标签名>
-
- 标签名是我们自己定义的。建议大家。采用标识符的命名规则去给一个标签起名字。(数字字母下划线,并且数字不能作为开头)
-
- 案例:
- 描述 书籍的信息。书名字,作者,单价。
-
-
- 标签的书写注意事项:
- 1、xml中的所有标签必须闭合。
- 2、xml中的标签名称严格区分大小写。<User> <user>
- 3、在xml标签名中间不要书写空格,或者 冒号 逗号 等符号。
- 标签的名字不要有空格一类特殊符号。
- 4、标签名不要以数字开始。(可以按照标识符的方式给标签去命名)
-
- 5、书写xml标签时 ,标签不能互相嵌套。
- <age>23<name>zhangsan>age>name>
- 6、所有的xml文件只能有一个根标签。
-
- 7、我们可以通过浏览器来校验xml文件的格式是否正确。
- <books>
- <book>
- <name>三国演义name>
- <author>罗贯中author>
- <price>39.9price>
- <version>1.0version>
- book>
- books>
xml中的注释和html中的注释的写法是一样的。
-------本身就是多行注释了。
注意:注释的内容,会在浏览器中显示出来。
书写注释的时候,内容尽可能的去避免 -- 字符
属性:书写在标签内的。对标签的数据进行扩展。对标签的进一步描述。
写法:<标签名 属性名=“属性值” 属性名=“属性值”> 标签名> 属性名也是自定义的。
注意问题:
1、如果是双标签,属性要书写在开始标签内
2、属性名不要出现空格,“;”“:” 特殊字符不要出现。
3、属性值必须用单引号,或者双引号包围起来。
CDATA区:可以输出特殊字符:原样的显示书写在CDATA的内容。会原封不动的显示出去。
我们可以使用预定义的实体,去替代一些特殊字符的输出。
注意实体的写法:&实体的名字;
| < | < | 小于 |
| > | > | 大于 |
| & | & | 和号 |
| &apos ; | ' | 单引 |
| " ; | "" | 双引 |
- <books>
- <book>
- <name>西游记name>
-
- <author sex="男" address="郑州"><吴承恩>author>
- <pirce>50pirce>
- <version>1.2version>
- book>
- books>
什么是XML约束:对xml中的内容进行限制哪些怎么写有一定的约束限制,其实后面我都都是把xml作为配置文件来使用,所以我必须得看的懂xml中约束。
DTD目的: 可以看懂DTD文件,基于这个DTD文件可以写一个符合约束的xml文件。
XML约束分为两种: DTD约束、 Schema约束。
元素定义
| 语法 | 关键字 | 作用 | 示例 |
|---|---|---|---|
| #PCDATA | 代表文本元素,里面的内容必须是文本 | ||
| EMPTY | 不能包含任何子元素和文本,仅可以使用属性 | ||
| (e1,e2) | 代表混合元素,表示这个标签里面还有其他的节点 |
元素的限制
| 限制 | 格式 |
|---|---|
| 元素可以出现的次数 | 0或1:? 0~N:* 1~N:+ |
这个的元素次数指的是:例如下面案例books根目录下book这个标签能够出现的次数。
- books [
-
- books (book*)>
-
- book (name,author,price,version)>
-
- name (#PCDATA)>
-
- author (#PCDATA)>
-
- price (#PCDATA)>
-
- version EMPTY>
- ]>
- <books>
-
- <book>
- <name>name>
- <author>author>
- <price>price>
- <version/>
- book>
- books>
当在xml文件中加入约束后,输入标签
把DTD约束写到一个xml文件中有个弊端,就是只能这一个文件能够使用,为了方便以后多个文件可以共有这个DTD约束,我们需要把约束写到单独的一个.dtd文件中。
book.dtd文件
- books (book*)>
-
- book (name,author,price,version)>
-
- name (#PCDATA)>
-
- author (#PCDATA)>
-
- price (#PCDATA)>
-
- version EMPTY>
books.xml文件
- books SYSTEM "book.dtd">
- <books>
- <book>
- <name>西游记name>
- <author>吴承恩author>
- <price>29.9price>
- <version/>
- book>
- <book>
- <name>水浒传name>
- <author>施耐庵author>
- <price>39.9price>
- <version/>
- book>
- books>
定义标签中的属性
attribute list ,可以定义多个属性,为一个标签定义多个属性。
标签名:属性属于那个标签的。
属性名 属性的类型(CDATA (EN1|EN2) ) 属性的约束(REQUIRED)为了便于阅读。把多个属性进行换行。
属性名 属性的类型 属性的约束
属性名 属性的类型 属性的约束
| 值 | 解释 |
|---|---|
| CDATA | 表示文本 |
| #REQUIRED | 属性是必须的 |
| #IMPLIED | 属性非必须的 |
| #FIXED | 属性为固定字符串值 |
book.dtd文件
- books (book*)>
-
- book (name,author,price,version)>
-
- name (#PCDATA)>
-
- author (#PCDATA)>
-
- price (#PCDATA)>
-
- version EMPTY>
-
-
-
-
-
- author
- name CDATA #REQUIRED
- age CDATA #REQUIRED
- sex CDATA #IMPLIED
- sco CDATA #FIXED "100"
book.xml文件
- books SYSTEM "book.dtd">
- <books>
- <book>
- <name>西游记name>
- <author name="吴承恩" age="48" sex="男" sco="100">吴承恩author>
- <price>29.9price>
- <version/>
- book>
- <book>
- <name>水浒传name>
- <author name="施耐庵" age="58" sex="男" sco="100">施耐庵author>
- <price>39.9price>
- <version/>
- book>
- books>
1、XML Schema是基于 XML 的 DTD 替代者。
2、XML Schema 符合XML语法结构,并且是可扩展的,后缀名为.xsd(xml schema document)。
3、XML Schema更容易地描述允许的文档内容,以及约束定义, 并支持名称空间。
配置xsd文件
- <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
- xmlns="http://www.example.org/bookSchema"
- targetNamespace="http://www.example.org/bookSchema"
- elementFormDefault="qualified">
-
- <xs:element name='books'>
- <xs:complexType>
-
-
-
- <xs:sequence maxOccurs='unbounded '>
- <xs:element name='book'>
- <xs:complexType>
- <xs:sequence>
-
- <xs:element name='name' type="xs:string"/>
-
- <xs:element name="author" >
-
- <xs:complexType>
- <xs:simpleContent>
- <xs:extension base="xs:string">
- <xs:attribute name="name" type="xs:string"/>
- xs:extension>
- xs:simpleContent>
- xs:complexType>
- xs:element>
-
- <xs:element name='price' type="xs:double"/>
- xs:sequence>
- xs:complexType>
- xs:element>
- xs:sequence>
- xs:complexType>
- xs:element>
- xs:schema>
引入xsd文件
- <books xmlns="http://www.example.org/bookSchema"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.example.org/bookSchema book.xsd">
- <book>
- <name>红楼梦name>
- <author>曹雪芹author>
- <price>29.9price>
- book>
- <book>
- <name>三国演义name>
- <author>罗贯中author>
- <price>39.9price>
- book>
- books>
DOM(Document Object Model). 是用与平台和语言无关的方式表示XML文档的官方W3C标准,将标记语言文档一次性加载进内存,在内存中形成一颗dom树。
优点
操作方便,可以对文档进行CRUD的所有操作
缺点
通常需要加载整个XML文档来构造层次结构,消耗资源大。
SAX处理的优点非常类似于流媒体的优点。分析能够立即开始,而不是等待所有的数据被处理。逐行读取,基于事件驱动的。
什么是事件驱动:一种基于回调机制的程序运行方法。由外至内一层一层解析。
优点
①不需要等待所有数据都被处理,分析就能立即开始。 ②只在读取数据时检查数据,不需要保存在内存中。 ③可以在某个条件得到满足时停止解析,不必解析整个文档。 ④效率和性能较高,能解析大于系统内存的文档。
缺点
只能读取,不能增删改
很难同时访问同一文档的不同部分数据,不支持XPath
JDOM(Java-based Document Object Model)的目的是成为Java特定文档模型,它简化与XML的交互并且比使用DOM实现更快。
优点
①使用具体类而不是接口,简化了DOM的API。 ②大量使用了Java集合类,方便了Java开发人员。
缺点
①没有较好的灵活性。 ②性能较差。
dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的。性能优异功能强大简单易用开放源代码。
优点
①大量使用了Java集合类,方便Java开发人员,同时提供一些提高性能的替代方法。 ②支持XPath。 ③有很好的性能。
缺点
大量使用了接口,API较为复杂
接下来我就演示一下使用DOM4J读取一下xml文件里的内容输出到控制台。
首先我们需要在目录下创建一个lib包,把下面的链接地址中的jar包放到lib包内,并手动添加到模块。


DOM4J的jar包链接如下:
链接:https://pan.baidu.com/s/1gwt_vNjALoae1ZsfKh-t_Q?pwd=6ly7
提取码:6ly7
Book.xml文件
- <books>
- <book id="1">
- <name>西游记name>
- <author>吴承恩author>
- <price>29.9price>
- <version/>
- book>
- <book id="2">
- <name>水浒传name>
- <author>施耐庵author>
- <price>39.9price>
- <version/>
- book>
- books>
测试类
- public class DOMTest {
- public static void main(String[] args) throws DocumentException {
- SAXReader reader=new SAXReader();
- Document document = reader.read("Book.xml");
- //获取根目录元素对象
- Element dom = document.getRootElement();
- //获取所有根目录下的子节点
- List
elements = dom.elements(); - for (Element element : elements) {
- //输出子节点的属性id值
- System.out.println(element.attributeValue("id"));
- //输出name值
- System.out.println(element.elementText("name"));
- //输出author值
- System.out.println(element.elementText("author"));
- //输出price值
- System.out.println(element.elementText("price"));
- System.out.println("----------------");
- }
- }
- }