定义

XML=Extensible Markup Language=可扩展标记语言 , 被设计用来传输和存储数据 , 独立于软件和硬件的信息传输工具

XML 仅仅是纯文本 XML 标签没有被预定义 , 需要自行定义标签

XML 允许创作者定义自己的标签和自己的文档结构

它是W3C组织推荐的标准

XML与HTML之间的差异

XML被设计用来传输和存储数据 , 其焦点是数据的内容

HTML被设计用来显示数据

XML 不会做任何事情。XML 被设计用来结构化、存储以及传输信息

XML语法

(1)xml的声明

XML文件一般以XML声明开始,它提供了文档的基本信息 定义 XML 的版本 (1.0) 和所使用的编码 : ISO-8859-1 = Latin-1/西欧字符集

属性说明 :

version : 表示XML的版本

encoding : 表示XML文件使用的字符编码方法

(2)标签

标签是左括号(<)和右括号(>)之间的文本

(3)根元素

XML 文档必须包含根元素。该元素是所有其他元素的父元素 XML文件是一种树状结构,它从根部开始,然后扩展到枝叶

XML的内容必须包含在一个单一元素中,这个单一元素称为根元素,它包含文档中所有文本和所有其他元素

(4)元素

XML 元素指的是从(且包括)开始标签直到(且包括)结束标签的部分。

元素可包含其他元素、文本或者两者的混合物。元素也可以拥有属性。

区分大小写 需要正确嵌套 XML元素都必须正确关闭

<student>
    <id>1101</id>
    <stuName>张三</stuName>
</student>

(5)实体引用

一些字符拥有特殊的意义 , 用实体引用来代替这些字符


(6)注释

<!-- This is a comment --> 

(7)属性

属性必须有值 , 值须加引号(可以使用单引号或双引号,但要始终保持一致)

属性 (Attribute) 提供关于元素的额外(附加)信息

因使用属性而引起的一些问题:

属性无法包含多重的值(元素可以)

属性无法描述树结构(元素可以)

属性不易扩展(为未来的变化)

属性难以阅读和维护

请尽量使用元素来描述数据。而仅仅使用属性来提供与数据无关的信息。

(8)空格保留

在 XML 中,文档中的空格不会被删节

(9)XML 以 LF 存储换行

在 Windows 应用程序中,换行通常以一对字符来存储:回车符 (CR) 和换行符 (LF)。这对字符与打字机设置新行的动作有相似之处。在 Unix 应用程序中,新行以 LF 字符存储。而 Macintosh 应用程序使用 CR 来存储新行。

(10)XML 命名规则

XML 元素必须遵循以下命名规则:

  • 名称可以含字母、数字以及其他的字符
  • 名称不能以数字或者标点符号开始
  • 名称不能以字符 “xml”(或者 XML、Xml)开始
  • 名称不能包含空格

可使用任何名称,没有保留的字词。
使名称具有描述性。使用下划线的名称也很不错。名称应当比较简短,比如:<book_title>,而不是:<the_title_of_the_book>。

避免 "-" 字符。如果您按照这样的方式进行命名:"first-name",一些软件会认为你需要提取第一个单词。

避免 "." 字符。如果您按照这样的方式进行命名:"first.name",一些软件会认为 "name" 是对象 "first" 的属性。

避免 ":" 字符。冒号会被转换为命名空间来使用(稍后介绍)。

XML 文档经常有一个对应的数据库,其中的字段会对应 XML 文档中的元素。有一个实用的经验,即使用数据库的名称规则来命名 XML 文档中的元素。

非英语的字母比如 éòá 也是合法的 XML 元素名,不过需要留意当软件开发商不支持这些字符时可能出现的问题。

(11)DTD

通过 DTD 验证的 XML 是“合法”的 XML
DTD是用来定义XML文件的结构,为XML文件提供语法与规则,内容既可以定义在文件之内也可以定义在文件之外。对于XML来说DTD是可选的内容。
<!DOCTYPE note [
  <!ELEMENT note (to,from,heading,body)>
  <!ELEMENT to      (#PCDATA)>
  <!ELEMENT from    (#PCDATA)>
  <!ELEMENT heading (#PCDATA)>
  <!ELEMENT body    (#PCDATA)>
]> 

(12)Schema

名为 XML Schema , 用来描述XML文档的结构,是DTD的替代者,比DTD更加强大。 ​

Schema的优势 :

Schema可针对未来的需求进行扩展, Schema更加完善,功能更强大

Schema基于XML编写而成的 Schema支持数据类型,DTD没有

<xs:element name="note">

<xs:complexType>
  <xs:sequence>
    <xs:element name="to"      type="xs:string"/>
    <xs:element name="from"    type="xs:string"/>
    <xs:element name="heading" type="xs:string"/>
    <xs:element name="body"    type="xs:string"/>
  </xs:sequence>
</xs:complexType>

</xs:element> 

(13)XML 验证器

XML验证器 XML验证器

使用DOM4J解析XML文件

1.下载dom4j的jar包

2.在src下创建xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!-- XML的声明 提供了文档的基本信息version:版本encoding:XML文件使用的字符编码方法-->
<student>
    <id>1101</id>
    <stuName>张三</stuName>
</student>

3.在src下创建包cn.kgc.test

4.在包cn.kgc.test创建类StudentTest.java

package cn.kgc.test;
​
import java.io.File;
import java.util.List;
​
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
​
public class StudentXML {
    public static void main(String[] args) {        
        try {
            //1.读取XML文件,获得document对象 
            SAXReader reader=new SAXReader();
            Document document=reader.read(new File("src/student.xml"));
            //2.获取文档的根节点
            Element rootNode=document.getRootElement();
            System.out.println("根节点的名称:"+rootNode.getName());
            //3.获取根节点下的子节点
            List<Element> subList=rootNode.elements();
            for (Element element : subList) {
                System.out.println(element.getName()+":"+element.getText());
            }
        } catch (DocumentException e) {
            e.printStackTrace();
        }       
    }
}

5.测试结果


Empty spaces,fill the pages.