android学习笔记(01)-XML

注解
--------------

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.特殊字符
    &   &amp;
    <   &lt;
    >   &gt;
    "   &quot;
    '   &apos;

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中引用:
    &copyright


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     }
原文地址:https://www.cnblogs.com/8386blogs/p/7294000.html