定义
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.测试结果

Comments | 2 条评论
Itís hard to find knowledgeable people about this topic, however, you sound like you know what youíre talking about! Thanks
Everything is very open with a clear description of the issues. It was really informative. Your website is useful. Thanks for sharing!