《XML入门(阿里云大学)》笔记

课程链接:https://edu.aliyun.com/course/1708

————————————————————————————————————

第1章:XML入门

课时1:XML简介

什么是XML.PNG

  • XML主要功能:为了存储数据。
  • XML的版本:
    • 1.0(使用)
    • 1.1(不使用,不能向下兼容)

课时2:XML的应用

  • XML的应用:
    • 不同系统之间数据传输
    • 用来表示生活中有关系的数据
    • 用在文件中进行信息的配置

课时3:XML的文档声明

XML语法-文档声明.PNG

课时4:XML中文乱码问题解决

  • 解决中文乱码:保证文档声明中的encoding和文件保存的编码一致。

课时5:XML元素的定义

XML元素1.PNG

XML元素2.PNG

XML元素3.PNG

课时6:XML属性的定义

XML属性.PNG

课时7:XML注释

XML注释.PNG

课时8:XML特殊字符

XML转义字符.PNG

课时9:XML的CDATA区

XML的CDATA区.PNG

  • CDATA区作用:解决多个字符都需要转义的操作,把这些内容放到CDATA区里,就不需要转义了。

课时10:XML的PI指令

  • PI指令(处理指令)

XML处理指令.PNG

▲ PI指令也仍然是不能放在第一行的,第一行一定得是文档声明。

课时11:XML语法规则总结

XML语法规则总结.PNG

课时12:XML约束简介

XML约束概述.PNG

第2章:DTD(文档类型定义)

课时12:DTD快速入门

DTD约束快速入门.PNG

  • DTD文件:

    • xml中有几个元素,dtd文件中就写几个<!ELEMENT>

    • 元素:

      • 简单元素:没有子元素的元素

        <!ELEMENT 元素名称 (#PCDATA)>
        
      • 复杂元素:有子元素的元素

        <!ELEMENT 元素名称 (子元素)>
        
    • 在xml文件中引入dtd文件:

      <!DOCTYPE 根元素名称 SYSTEM "dtd文件的路径">
      
  • 如果用浏览器打开xml文件,浏览器只校验xml的语法,不校验约束。所以如果需要校验xml的约束,需要使用工具,如myeclipse、idea。

  • 示例:

    • 编写person.dtd文件:

      <!ELEMENT person (name, age)>
      <!ELEMENT name (#PCDATA)>
      <!ELEMENT age (#PCDATA)>
      
    • 编写person.xml文件:

      <?xml version="1.0" encoding="utf-8" ?>
      <!DOCTYPE person SYSTEM "person.dtd">
      <person>
          <name>皮卡丘</name>
          <age>10</age>
      </person>
      

      此时如果在xml文件,给person标签新加子标签的话,在idea中会产生以下效果(鼠标放在新标签上):

      XML约束截图.png

课时13:DTD的引入方式

  • DTD的引入方式:

    • 使用外部DTD(本系统的)
    • 使用内部DTD
    • 使用公共DTD(网络上的)
  • 使用内部DTD:

    <?xml version="1.0" encoding="utf-8" ?>
    <!DOCTYPE person [
            <!ELEMENT person (name, age)>
            <!ELEMENT name (#PCDATA)>
            <!ELEMENT age (#PCDATA)>
    ]>
    <person>
        <name>皮卡丘</name>
        <age>10</age>
    </person>
    
  • 使用公共DTD(如struts2配置文件):

    <!DOCTYPE 根元素 PUBLIC "DTD名称" "DTD文档的URL">
    

课时14:使用DTD定义元素

  • 简单元素:

    <!ELEMENT 元素名称 约束类型>
    
    • 约束类型:

      • (#PCDATA):约束为字符串类型
      • EMPTY:约束为空(没有内容)
      • ANY:可为空,可不为空
      <?xml version="1.0" encoding="utf-8" ?>
      <!DOCTYPE person [
              <!ELEMENT person (name, age, sex, title)>
              <!ELEMENT name (#PCDATA)>
              <!ELEMENT age (#PCDATA)>
              <!ELEMENT sex EMPTY>
              <!ELEMENT title ANY>
      ]>
      <person>
          <name>皮卡丘</name>
          <age>10</age>
          <sex></sex>
          <!--<title></title>-->
          <title>007</title>
      </person>
      
  • 复杂元素:

    <!ELEMENT 元素名称 (子元素)>
    
    • 子元素出现的次数(下述符号表示与正则一致):

      • ”+“(加号):表示至少出现1次
      • ”?“(英文问号):表示出现0或1次
      • ”*“(星号):表示可出现任意次
      <?xml version="1.0" encoding="utf-8" ?>
      <!DOCTYPE person [
              <!ELEMENT person (name+, age?, sex*, title)>
              <!ELEMENT name (#PCDATA)>
              <!ELEMENT age (#PCDATA)>
              <!ELEMENT sex EMPTY>
              <!ELEMENT title ANY>
      ]>
      <person>
          <name>皮卡丘1</name>
          <name>皮卡丘2</name>
          <!--<age>10</age>-->
          <sex></sex>
          <!--<title></title>-->
          <title>007</title>
      </person>
      
    • 子元素的分隔符:

      • ”,“(英文逗号):标签中的子元素需要按约束的顺序出现
      • ”|“(竖杠):标签中的子元素只能出现约束中的任意一个

课时15:使用DTD定义属性

DTD属性定义.png

  • 属性类型:

    • CDATA:约束为字符串类型
    • 枚举:使用括号包起来,枚举值使用竖杠分隔,约束为只能等于枚举值中的任意一个
    • ID:表示属性的取值不可重复,并且只能由字母、下划线开始,也不能出现空白字符
  • 属性约束:

    • #REQUIRED:表示该属性必须出现
    • #IMPLIED:表示该属性可有可无
    • #FIXED:表示该属性的取值为一个固定值:#FIXED “固定值”
    • 默认值:表示未定义该属性时,则直接使用默认值
  • 示例:

    • 官方示例:

      <!ATTLIST 页面作者
      	姓名 CDATA #IMPLIED
      	年龄 CDATA #IMPLIED
      	联系信息 CDATA #REQUIRED
      	网站职务 CDATA #FIXED "页面作者"
      	个人爱好 CDATA "上网"
      >
      
      • 姓名、年龄:可有可无
      • 联系信息:必须有
      • 网站职务:固定为”页面作者“
      • 个人爱好:默认为”上网
    • 个人示例:

      <?xml version="1.0" encoding="utf-8" ?>
      <!DOCTYPE person [
              <!ELEMENT person (name+, age?, sex, heart)>
              <!ELEMENT name (#PCDATA)>
              <!--name的属性id:
                  值:不可重复,并且要以字母/下划线开头
                  属性:可以设置,也可以不设置-->
              <!ATTLIST name
                      id ID #IMPLIED
                      >
              <!--age的属性value:
                  值:默认为10-->
              <!ELEMENT age (#PCDATA)>
              <!ATTLIST age
                      value CDATA "10"
              >
              <!--sex的属性value:
                  值:只能为“女”或“男”
                  属性:必须设置-->
              <!ELEMENT sex (#PCDATA)>
              <!ATTLIST sex
                      value (女|男) #REQUIRED
              >
              <!--heart的属性count:
                  值:只能为1-->
              <!ELEMENT heart EMPTY>
              <!ATTLIST heart
                      count CDATA #FIXED "1"
              >
      ]>
      <person>
          <name id="i1">皮卡丘1</name>
          <name>皮卡丘2</name>
          <age>10</age>
          <sex value="男"></sex>
          <heart count="1"></heart>
      </person>
      

课时16:定义实体

  • 使用:

    • 在DTD中定义(最好写在内部DTD里,因为某些浏览器可能获取不到外部DTD里的实体内容):

      <!ENTITY 实体名称 "实体内容">
      
    • 在XML中引用:

      &实体名称;
      
  • 示例:

    • 定义:

      <?xml version="1.0" encoding="utf-8" ?>
      <!DOCTYPE person [
              <!ELEMENT person (name, age)>
              <!ELEMENT name (#PCDATA)>
              <!ELEMENT age (#PCDATA)>
              <!ENTITY who "皮卡丘">
      ]>
      <person>
          <name>&who;</name>
          <age>10</age>
      </person>
      
    • 显示:

      <person>
      	<name>皮卡丘</name>
      	<age>10</age>
      </person>
      

课时17:W3C的案例

案例网址:https://www.w3cschool.cn/dtd/dtd-examples.html

  • 案例tvschedule.dtd代码:

    <!DOCTYPE TVSCHEDULE [
        <!ELEMENT TVSCHEDULE (CHANNEL+)>
        <!ELEMENT CHANNEL (BANNER,DAY+)>
        <!ELEMENT BANNER (#PCDATA)>
        <!ELEMENT DAY (DATE,(HOLIDAY|PROGRAMSLOT+)+)>
        <!ELEMENT HOLIDAY (#PCDATA)>
        <!ELEMENT DATE (#PCDATA)>
        <!ELEMENT PROGRAMSLOT (TIME,TITLE,DESCRIPTION?)>
        <!ELEMENT TIME (#PCDATA)>
        <!ELEMENT TITLE (#PCDATA)> 
        <!ELEMENT DESCRIPTION (#PCDATA)>
    
        <!ATTLIST TVSCHEDULE NAME CDATA #REQUIRED>
        <!ATTLIST CHANNEL CHAN CDATA #REQUIRED>
        <!ATTLIST PROGRAMSLOT VTR CDATA #IMPLIED>
        <!ATTLIST TITLE RATING CDATA #IMPLIED>
        <!ATTLIST TITLE LANGUAGE CDATA #IMPLIED>
    ]>
    
  • 编写tvschedule.xml文件:

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE TVSCHEDULE SYSTEM "tvchedule.dtd">
    <TVSCHEDULE NAME="CCTV">
        <CHANNEL CHAN="10">
            <BANNER>CCTV10科教频道</BANNER>
            <DAY>
                <DATE>2021-03-01</DATE>
                <HOLIDAY></HOLIDAY>
            </DAY>
            <DAY>
                <DATE>2021-03-02</DATE>
                <PROGRAMSLOT>
                    <TIME>19:00</TIME>
                    <TITLE>新闻联播</TITLE>
                </PROGRAMSLOT>
            </DAY>
        </CHANNEL>
    </TVSCHEDULE>
    

第3章:XML解析之JAXP(SUN公司官方提供的API)

课时18:XML解析简介

XML解析技术概述.PNG

  • XML解析方式:
    • dom方式解析:
      • 根据xml的层级结构在内存中分配一个树形结构,把xml的标签、属性和文本都封装成对象。
      • 缺点:如果文件过大,会造成内存溢出。
      • 优点:很方便地实现增删改操作。
    • sax方式解析:
      • 根据事件驱动,边读边解析
        • 从上到下,一行一行地解析,解析到某一个对象,则返回对象名称
      • 缺点:不能实现增删改操作。
      • 优点:如果文件过大,也不会造成内存溢出;并且可以方便地实现查询操作。

课时19:JAXP API的查看

  • 想要解析xml,首先需要解析器。

  • 不同公司和组织通过API来提供了针对dom和sax方式的解析器:

    • SUN公司:jaxp
    • dom4j组织:dom4j(实际开发中使用最多)
    • jdom组织:jdom
  • jaxp解析器在jdk的javax.xml.parsers包(jdk9:java.xml模块中)里:

    • dom类:
      • DocumentBuilder:解析器类
        • 抽象类,实例化方法:DocumentBuilderFactory.newDocumentBuilder()
        • 方法:
          • public Document parse(String uri) throws SAXException, IOException
            • Document:
              • 是org.w3c.dom.Node接口的子接口
              • 方法:
                • 获取标签:
                  • Element getElementById(String elementId)
                  • NodeList getElementsByTagName(String tagname)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值