注解
--------------
1 @Override //复写 2 @Deprecated //过时的 3 @SuppressWarnings //压制错误
单元测试
--------------
junit
XML可扩展标记语言(Extensible Markup Lanuage)
--------------
1 <?xml version="1.0" encoding="UTF-8"?> 2 <中国> 3 <北京> 4 <海淀></海淀> 5 <丰台></丰台> 6 </北京> 7 <山东> 8 <济南></济南> 9 <青岛></青岛> 10 </山东> 11 </中国>
可用于在client和server之间传递数据
例:网易新闻客户端
1 <?xml version="1.0" encoding="UTF-8"?> 2 <newslist> 3 <news> 4 <title>杜海涛回应...</title> 5 <content> 6 杜海涛接受采访... 7 </content> 8 <pic>http://news.163.com/img/135651324.jpg</pic> 9 </news> 10 </newslist>
2.用来保存有关系的数据
3.用来做配置文件,Android中的界面布局文件,还有清单文件
XML语法
--------------
1.文档声明
1..在首行
2..最简单的语法为:<?xml version="1.0"?>
3..保存在磁盘上的文件编码要与声明的编码一致
GB2312
4..用standalone属性说明文档是否独立,即是否依赖其他文档
5..如:
<?xml version="1.0" standalone="yes"?>
2.元素
1..XML文件中出现的标签(<起始标签></结束标签>)
包含标签主体: <mytag>some content</mytag>
不包含标签主体: <mytag></mytag>
2..有且只有一个根标签
3..如果标签中没有其他内容可以自闭合<taag/>
4..命名规范
区分大小写
不能以数字或下划线开头
不能以xml(Xml, XML)等开头
不能包含空格
不能包含冒号:
5..换行制表符传输时会保留,保留会导致流量的浪费
3.属性
1..一个元素可以有多个属性,每个属性都有它自己的名称和取值,例如: <mytag name="value" .../>
2..属性要用引号(单引号或双引号)引起来
3..命名规范与元素相同
4..属性不允许重复
5..标签属性所代表的信息也可以用子元素的形式来描述
4.注释
1..不能放在第一行
2..<!--comments ctrl + shift + /-->
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!-- 我是注释 --> 3 <Persons> 4 <person name="liufeng"> 5 <firstName>feng</firstName> 6 <!-- <lastName>liu</lastName> --> 7 </person> 8 </Persons>
3..不能嵌套
5.CDATDA区
1..所有XML文档中的文本均会被解析器解析
2..只有CDATA区段(CDATA section)中的文本会被解析器忽略
3..语法:<![CDATA[ 内容 ]]>
6.特殊字符
& &
< <
> >
" "
' '
xml的约束
--------------
格式良好不一定有效,有效一定良好
约束文档定义了XML中允许出现的元素名称,属性,及元素出现的顺序
常用的约束技术:XML DTD, XML Schema
DTD(Document Type Definition):文档类型定义
--------------
.dtd文件必须使用UTF-8编码
1.引用本地DTD文档
<!DOCTYPE 根元素 SYSTEM "book.dtd">
2.引用公共网络上的DTD
<!DOCTYPE 根元素 PUBLIC "DTD名称""DTD文档URL">
1 <!DOCTPE web-app PUBLIC"-//Sun Microsystems,Inc.//DTD Web Application 2.3//EN""http://java.sun.com/dtd/web-app_2_3.dtd">
3.文件内
1 <?xml version="1.0" encoding="GBK"?> 2 <!DOCTYPE 书架 [ 3 <!ELEMENT 书架 (书+)> 4 <!ELEMENT 书 (书名,作者,售价)> 5 <!ELEMENT 书名 (#PCDATA)> 6 <!ELEMENT 作者 (#PCDATA)> 7 <!ELEMENT 售价 (#PCDATA)> 8 <!ATTLIST 书 9 ISBN ID #REQUIRED 10 COMMENT CDATA #IMPLIED 11 出版社 CDATA "AAA" 12 > 13 <!ENTITY copyrity "hzag"> 14 ]> 15 <书架> 16 <书 ISBN="a" COMMENT="slfk"> 17 <书名>Java教程</书名> 18 <作者>jaslkf</作者> 19 <售价>222元</售价> 20 </书> 21 <书 ISBN="b" COMMENT="slfd"> 22 <书名>Java教af程</书名> 23 <作者>jaslakf</作者> 24 <售价>222a元</售价> 25 </书> 26 </书架>
DTD语法细节
--------------
1.定义元素
1..在DTD文档中用ELEMENT关键字来声明一个XML元素
2..语法:<!ELEMENT 元素名称 使用规则>
3..使用规则
(#PCDATA)主体的内容只能是普通的文本(parsed character Data)
EMPTY用于指示元素的主体为空
ANY用于指示元素的主体为任意元素
(子元素)指示元素中包含的子元素
4..定义子元素及描述他们的关系
1...如果子元素用逗号分开,说明必须按照声明的顺序去编写XML文档
2...如果子元素用“|”分开,说明任选其一
3...用+*?来表示出现的次数
如果子元素后面没有+*?说明必须出现一次
+表示至少出现一次
*表示可有可无
?表示0次或1次
2.定义属性
1..用ATTLIST关键字来定义属性
2..语法:<!ATTLIST 元素名称 属性值类型 设置说明 ...>
3..属性值类型
1...CDATA:表示属性的取值为普通的文本字符串
2...(a|b|c)表示只能从中选其一
3...ID表示取值不能重复
4..设置说明
1...#REQUIRED表示该属性必须出现
2...#IMPLIED表示该属性可有可无
3...#FIXED表示属性的取值为一个固定值 语法:#FIXED "固定值"
3.定义实体
1..概念:在DTD中定义,在XML中使用
2..语法:<!ENTITY 实体名称 "实体内容">
3..引用方式(是在XML中使用):&实体名称
例:
在DTD中定义:
<!ENTITY copyright "hzdsg">
XML中引用:
©right
XML解析
--------------
Dom解析
Sax解析
Pull解析
Dom解析
--------------
元素节点Element
属性节点Attr
文本节点Text
文档节点Document
编程思路:DocumentBuilderFactory->DocumentBuilder->Document->通过节点获得NodeList->具体的Node
修改标签值思路:TransformerFactory->Transformer->transform(Souce, result)
1 public void domParse() throws Exception{ 2 //获取DocumentBuilderFactory 3 DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); 4 //获取DocumentBuilder 5 DocumentBuilder documentBuilder = builderFactory.newDocumentBuilder(); 6 //通过documentBuilder解析xml文档获得Document对象 7 Document document = documentBuilder.parse("Books.xml"); 8 //通过元素名字可以找到元素集合 9 NodeList nodeList = document.getElementsByTagName("example:书名"); 10 int length = nodeList.getLength(); 11 for(int i = 0;i<length;i++) { 12 Node node = nodeList.item(i); 13 String content = node.getTextContent(); 14 System.out.println(content); 15 } 16 Node node = nodeList.item(1); 17 //读出对应文本的内容 18 String content = node.getTextContent(); 19 System.out.println(content); 20 } 21 22 @Test 23 public void domModifyxml() throws Exception { 24 DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); 25 DocumentBuilder builder = documentBuilderFactory.newDocumentBuilder(); 26 Document document = builder.parse("Books.xml"); 27 NodeList nodeList = document.getElementsByTagName("example:书名"); 28 29 Node node = nodeList.item(0); 30 //修改节点内容 31 node.setTextContent("di二ben"); 32 33 TransformerFactory transformerFactory = TransformerFactory.newInstance(); 34 Transformer transformer = transformerFactory.newTransformer(); 35 //数据源 36 Source xmlSource = new DOMSource(document); 37 //要修改的目标 38 Result outputTarget = new StreamResult("Books.xml"); 39 transformer.transform(xmlSource, outputTarget); 40 }