1.XML的作用
①描述带关系的数据(作为软件的配置文件): 包含与被包含的关系②作为数据的载体(存储数据,小型的"数据库")
2.需注意的语法
①xml标签名称区分大小写。②xml标签名不能以数字开头
③在一个xml文档中,有且仅有一个根标签
④转义字符
" "
& &
原样输出 <![CDATA[内容]]> CDATA块
3.处理指令(告诉xml解析如何解析xml文档)
示例: <?xml-stylesheet type="text/css" href="1.css"?>4.XML解析方式
DOM解析SAX解析
5.XML解析工具
基于DOM解析原理:① JAXP
② JDOM工具(非官方)
③ Dom4J工具(非官方,三大框架 默认读取xml的工具就是Dom4j)
基于SAX解析原理:
① Sax解析工具
6.DOM解析原理
xml解析器一次性把整个xml文档加载进内存,然后在内存中构建一颗Document的对象树,通过Document对象,得到树上的节点对象,通过节点对象访问(操作)到xml文档的内容。
7.Domj4读取xml文件
添加maven依赖<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
创建xml解析器对象:
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(new File("contact.xml"));
节点方式:
Iterator Element.nodeIterator(); //获取当前标签节点下的所有子节点
标签方式:
Element Document.getRootElement(); //获取xml文档的根标签
Element Element.element("标签名") //获取指定名称的第一个子标签
Iterator<Element> Element.elementIterator("标签名");// 获取指定名称的所有子标签
List<Element> Element.elements(); //获取所有子标签
属性方式:
String Element.attributeValue("属性名") //获取指定名称的属性值
Attribute Element.attribute("属性名"); //获取指定名称的属性对象
Attribute.getName() //获取属性名称
Attribute.getValue() //获取属性值
List<Attribute> Element.attributes(); //获取所有属性对象
Iterator<Attribute> Element.attibuteIterator(); //获取所有属性对象
文本方式:
Element.getText(); //获取当前标签的文本
Element.elementText("标签名") //获取当前标签的指定名称的子标签的文本内容
8.点击下载Domj4读取xml文件案例
9.Domj4修改xml文件
①写出内容到xml文档XMLWriter writer = new XMLWriter(OutputStream, OutputForamt)
wirter.write(Document);
②修改xml文档的API
增加:
DocumentHelper.createDocument() 创建文档
addElement("名称") 增加标签
addAttribute("名称","值") 增加属性
addText("值") 增加内容
修改:
Attribute.setValue("值") 修改属性值
Element.addAtribute("同名的属性名","值") 修改同名的属性值
Element.setText("内容") 修改文本内容
删除
.detach(); 删除
10.xPath技术
① xPath作用主要是用于快速查找出所需的节点对象。
② 在dom4j中使用xPath技术步骤:
a.导入jar包 jaxen-1.1-beta-6.jar
b.使用xpath的方法
List<Node> selectNodes("xpath表达式"); 查询多个节点对象
Node selectSingleNode("xpath表达式"); 查询一个节点对象
③ xPath语法 ("//Student[@id='2']")
/ 绝对路径 表示从xml的根位置开始或子元素(一个层次结构)
// 相对路径 表示不分任何层次结构的选择元素。
* 通配符 表示匹配所有元素
[] 条件 表示选择什么条件下的元素
@ 属性 表示选择属性节点
and 关系 表示条件的与关系(等价于&&)
text() 文本 表示选择文本内容
last() 表示条件下选择最后一个
not 取反
11.SAX解析
① 读取和解析xml文件对象SAXParser parser=SAXParserFactory.newInstance().newSAXParser();//创建SAXParser对象
parser.parse(File f, DefaultHandler dh); //解析xml文件方法。参数二:SAX事件处理程序。创建DefaultHandler的子类
② DefaultHandler类的API:
void startDocument()
void endDocument()
void startElement(String uri, String localName, String qName, Attributes attributes)
void endElement(String uri, String localName, String qName)
void characters(char[] ch, int start, int length)
12.DOM解析和SAX解析的区别:
1)DOM解析:
① 原理: 一次性加载xml文档,不适合大容量的文件读取
② DOM解析可以任意进行增删改成
③ DOM解析任意读取任何位置的数据,甚至往回读
④ DOM解析面向对象的编程方法(Node,Element,Attribute),Java开发者编码比较简单。
2)SAX解析:
① 原理: 加载一点,读取一点,解析一点。适合大容量文件的读取
② SAX解析只能读取
③ SAX解析只能从上往下,按顺序读取,不能往回读
④ SAX解析基于事件的编程方法。java开发编码相对复杂。
12. DTD约束
(1)引入:XML语法: 规范的xml文件的基本编写规则。(由w3c组织制定)
XML约束: 规范XML文件数据内容格式的编写规则。(由开发者自行定义)
(2)XML的约束技术
DTD约束:语法相对简单,功能也相对简单。学习成本也低。
Schema约束:语法相对复杂,功能也相对强大。学习成本相对高。(名称空间)
(3)dtd约束
①内部导入dtd方式
<!DOCTYPE note [内容]>
外部导入dtd方式
<!DOCTYPE note SYSTEM "note.dtd"> (本地文件方式)
<!DOCTYPE 根元素 PUBLIC "http://gz.itcast.cn/itcast.dtd"> (外部方式)
②DTD语法
Ⅰ.约束标签:
<!ELEMENT 元素名称 类别> 或 <!ELEMENT 元素名称 (元素内容)>
a.类别:
空标签: EMPTY
普通字符串: (#PCDATA)
任何内容: ANY
b.元素内容:
<!ELEMENT 元素名称 (子元素名称 1,子元素名称 2,.....)>
次数问题:
标签 : 必须且只出现1次。
标签+ : 至少出现1次
标签* : 任意次。
标签? : 0 或1次。
Ⅱ.约束属性:
<!ATTLIST 元素名称 属性名称 属性值类型 默认值>
属性值类型:控制属性值的
CDATA :表示普通字符串
(en1|en2|..): 表示一定是任选其中的一个值
ID:表示在一个xml文档中该属性值必须唯一,值不能以数字开头
默认值:
#REQUIRED 属性值是必需的
#IMPLIED 属性不是必需的
#FIXED value 属性不是必须的,但属性值是固定的
13. Schema约束
名称空间:告诉xml文档的哪个元素被哪个schema文档约束。 在一个xml文档中,不同的标签可以受到不同的schema文档的约束。①一个名称空间受到schema文档约束
②多个名称空间受到多个schema文档约束
③默认名称空间
④没有名称空间