学习内容
1、可以编写xml存放任意内容
2、通过DTD约束编写指定格式的xml
3、通过schema约束编写指定格式的XML
4、可以使用DOM4J解析xml
<?xml version="1.0" encoding="UTF-8"?>
1、文档必须要以<?xml 开头,以?>
结束
2、文档声明必须从文档的0行0列位置开始
3、文档声明
version:指定xml文档版本,必须属性,
encoding:指定当前文档的编码
元素element
1、元素是xml文档中最重要的组成部分
2、普通元素的结构开始标签、元素体、结束标签组成 hell hadoop
3、元素体:元素体可以是元素,也可以是文本 你好
4、空元素:空元素只有开始标签,而没有结束标签,但元素必须必须自己闭合
5、元素命名
区分大小写
不能使用空格,不能使用冒号
不建议以XML、xml、Xml开头
6、格式化良好的xml文档,必须只有一个根元素
属性
1、属性是元素的一部分,它必须出现在元素的开始标签中
2、属性的定义格式:属性名=属性值,其中属性值必须使用单引号或者双引号
3、一个元素可以有0~N个属性,但一个元素中不能出现同名属性
4、属性名不能使用空格、冒号等特殊字符,且必须以字母开头
注释
XML的注释和HTML相同,<!-- -->
转义
< <
> >
" "
' '
& &
CDATA区
<![CDATA[
任意内容
]]>
这个可以放一些特殊符号,不需要转义,但是不能包括 ]]>
XML 约束 DTD、schema
DTD定义元素语法
<!ELEMENT 元素名 元素描述>
元素名:自定义
元素描述包括:符号和数据类型
常见符号:?* + () | ,
常见类型:#PCDTD表示内容是文本,不能是子标签
? 表示该对象可以出现,但是只能出现一次
* 表示该对象可以出现任意次数
+ 表该对象至少出现一次可以出现多次
() 用来给元素分组
| 表明在列出的对象中选择一个
, 表示对象必须按指定的顺序出现
本地引用文档说明<!DOCTYPE web-app SYSTEM "web-app_2_3.dtd">
schema约束
1、schema是新的xml文档约束
2、schema要比DTD强大很多,是DTD替代者
3、schema本身也是XML文档,但schema文档的扩展名为xsd,而不是xml
4、schema功能更强大,数据类型更完善
5、schema支持名称空间
应用方式
<web-app xmlns="http://www.example.org/web-app_2_5"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.org/web-app_2_5 web-app_2_5.xsd"
version="2.5">
DOM4J解析xml
package xlucas.xml;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.util.List;
/**
* Created by Xlucas on 2018/4/30.
*/
public class dom4jdemo {
public static void main(String[] args){
try {
//获取Document
SAXReader sr= new SAXReader();
Document dc=sr.read("com/src/xlucas/xml/DTD.xml");
//获取根元素
Element rootElement = dc.getRootElement();
//获取根元素以及属性值
System.out.println(rootElement.getName()+" version "+rootElement.attributeValue("version"));
//获取所有子元素
List<Element> elements = rootElement.elements();
//遍历素有子元素
for(Element element:elements){
//获取元素名
String chilredelement=element.getName();
if("servlet".equals(chilredelement)){
//获取子标签内容 方式一
Element serveltname=element.element("servlet-name");
System.out.println(serveltname.getText());
//获取子标签内容 方式二
System.out.println(element.elementText("servlet-class"));
}
}
} catch (DocumentException e) {
e.printStackTrace();
}
}
}