• 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     }
  • 相关阅读:
    Git tag
    Docker学习笔记五 仓库
    Docker学习笔记四 Docker容器
    Docker学习笔记二 使用镜像
    Docker学习笔记一 概念、安装、镜像加速
    element-UI 下拉条数多渲染慢
    scroll-view——小程序横向滚动
    Jquery slider范围滑块,为两个滑块设置不同的setp值
    自说自话2
    自说自话1
  • 原文地址:https://www.cnblogs.com/8386blogs/p/7294000.html
Copyright © 2020-2023  润新知