XML解析

这篇博客主要介绍了XML的基本概念,如XML的用途、基本语法、文档声明。重点讲述了XML的解析方式,包括DOM、SAX、JDOM和DOM4J解析器的特性与使用。解析部分详细解释了DOM4J的解析过程和优势,并提到了XPath的支持。此外,还讨论了XML的约束,如DTD和Schema,以及它们的区别。
摘要由CSDN通过智能技术生成

1. XML总结

1.1. XML简介

XML : 可扩展的标记语言。(和HTML非常类似的)

  • 可扩展的。
  • 自定义的标签。

与HTML区别: XML传输数据,HTML是显示数据。

XML的版本: XML1.0(几乎都使用该版本) XML1.1(不向下兼容)

做什么用?=>描述有关系的数据

应用

  1. 作为配置文件。
  2. 可以在系统与系统之间进行数据的传输。
    • webserivice soap XML封装数据
    • json 和XML概念相似

1.2. XML基本语法

  • 文档声明(*****)

    • 写法: <?xml version="1.0" ?> 注意:<? 和xml之间不能有空格. xml和version、encoding、standalone 必须全部小写

    • 文档声明必须出现在xml文件的|–第一行和第一列–|(即该语句前面不能有空格,空行)的位置。

    • 属性:

      • version=“1.0” XML的版本 (必须写)
      • encoding=“UTF-8” 编码集 (可选的)决定解码的方式
      • standalone=“yes或者no” 代表xml的文件是否是独立的。(如果是no,不独立,可以引入外部的文件)(可选的)
        • 该属性没什么卵用,因为不写该属性,也可以引入外部的文件,即该值默认为 no 。
    • 乱码会伴随你们一生?

      • 产生的原因:保存文件时和打开文件时采用的编码不一致。
      • 解决办法:保存文件和打开文件采用的编码一致就ok。(MyEclipse不会产生乱码问题,自动转换好了)
  • 元素(***)

    • 开始标签和结束标签。

      • 包含标签主体: 文本
      • 不包含标签主体:
    • 不能交叉嵌套

    • 只能有一个根元素(必须有,并且只能有一个)

    • 命名规范:

      • 区分大小写 错误的: 代表两个标签
      • 不能以数字和-中划线开头 错误的:<1a> <-a>
      • 不能以XML(Xml XML xml)开头 错误的:
      • 不能包含空格和冒号。
  • 属性(***)

    • 自定义:命名规范同上。
    • 在同一个元素上,不能有相同的属性。(*****)
    • 属性值可以使用双引号或者单引号。
  • 注释(*)

    • 和HTML的注释相同
    • 注释不能嵌套。
  • 特殊字符
    转义字符

    •   <				&lt;
      
    •   >				&gt;
      
    •   &				&amp;
      
    •   单个双引号		    &quot;
      
    •   单个单引号		    &apos;
      

其中 < 和 & 符号必须转义,其他三个可以不用转义

如何在网页上显示特定的字符串?(包含一堆特殊字符,全部转义特别麻烦)

  • CDATA区

    • 把标签中的内容作为字符串。
    • 语法:
        <![CDATA[
            内容:当成字符串直接显示
        ]]>
    

    例:

        <![CDATA[
            if(2<3&&32>8){
                "das"&&'ds';
            }
        ]]>
    
  • PI(处理指令)(没用)

    • 替换HTML

1.3. XML约束

约束的分类

  • DTD
  • schema
hello.java <猫/>
  • 格式良好的XML:遵循语法规范。
  • 有效的XML:有约束。

1.3.1. XML约束–DTD 约束

  • DTD的约束
    • 快速入门

    • 快速入门的步骤:

      • 需要出现哪些标签?

      • 在DTD的文件中编写元素

        <!ELEMENT 元素名称 (元素类型)>
      • 判断元素是否是复杂还是简单元素?

        • 如果是简单元素:(#PCDATA) 代表是字符串,必须有()
        • 如果是复杂元素:(子节点1,子节点2 …) 内部是子结点的元素名称
      • 需要在book.xml引入外部DTD的文件

    • DTD与XML文档的关联方式

      • 可以在XML的文件中直接书写DTD的代码。(经常使用)

      • 引入本地的DTD文件(经常使用)

      • 引入网络上的DTD文件(偶尔使用)

    • 元素定义

      • 语法:<!ELEMENT 元素名称 元素类型>

        • (#PCDATA) 字符串,中间可以为空

        • EMPTY 空,标签内部不能包含数据,不能包括空格、换行

        • ANY 任意的,中间可以为空,可以为字符串,可以为(子元素)

        • (子元素)

        • 子元素:

          • 子元素之间的关系
            , 子元素出现是有顺序的
            | 子元素只能出现一个

          • 子元素出现的次数
            + 子元素出现1次或多次
            * 子元素出现0次或多次
            ? 子元素出现0次或1次

          在子元素名后,加上数量的限定

          <!ELEMENT MYFILE ((TITLE*, AUTHOR?, EMAIL)* | COMMENT)>
          
              <MYFILE>
                  <TITLE></TITLE>
                  <AUTHOR></AUTHOR>
                  <EMAIL></EMAIL>
                  <TITLE></TITLE>
                  <AUTHOR></AUTHOR>
                  <EMAIL></EMAIL>
                  <TITLE></TITLE>
                  <AUTHOR></AUTHOR>
                  <EMAIL></EMAIL>
              </MYFILE>
          
    • 属性定义(AttributeList)

      • 写法:

            <!ATTLIST 元素名称
                属性名称 属性类型 属性约束      和数据库中表中数据的定义 相似
                属性名称 属性类型 属性约束
            >
        
      • 属性类型

        • CDATA 字符串
        • 枚举(没有提供关键字) (男人|女人)–>枚举可能结果视为枚举类型声明
        • ID 代表唯一的值,不能以数字开头
      • 属性的约束

        • #IMPLIED 可选的
        • #REQUIRED 必须出现的

        以下两个属性,在前面定义了,即使相应的元素中没有写,也存在,相应属性是固定值/默认值

        • #FIXED 固定值 ,格式为: #FIXED “值”
        • 默认值 直接在属性类型后加上该默认值 (很少用)

        注意:一个元素内只能有一个 ID 属性,且 ID 属性后面的约束只能是
        #REQUIRED 或者 #IMPLIED,不能是 #FIXED 或者 默认值

        例:

         <!ARRLIST 
        	页数  CDATA  #REQUIRED           必须出现的
        	赠送  (赠送|非赠送) #IMPLIED     可选
        	编号  ID #REQUIRED               ID类型
        	二维码  CDATA #FIXED "哈哈哈"    固定值
        	出版国家  CDATA "中国"           默认值
        >
        
      • 实体定义(用的不多)
        * <!ENTITY 别名 "值" >
        在元素中引用 &别名; 最终在浏览器中显示的是 “值”

          *  需要在xml中引入别名,浏览器打开文件后,在引入的位置上显示值的。
        

        例:
        dtd 内容:

          	<!ATTLIST ...>
        
          	<!ENTITY haha "卧槽">
          ]>
        
          xml 内容:
              <书>&haha;</书>
          	 这里的&haha; 在浏览器中显示为 "卧槽"
        

示例: student.dtd


    <?xml version="1.0" encoding="UTF-8"?>
    <!ELEMENT  班级 (学生+)>
    <!ELEMENT  学生 (姓名,年龄,身高,体重)>
    <!ELEMENT  姓名 (#PCDATA)>
    <!ELEMENT  年龄 (#PCDATA)>
    <!ELEMENT  身高 (#PCDATA)>
    <!ELEMENT  体重 (#PCDATA)>


    <!ATTLIST  班级
        编号  ID #REQUIRED
        年级  CDATA "三年级"
        学校名 CDATA  #FIXED "西北工业大学"

    >

    <!ATTLIST  学生
            编号  ID #REQUIRED
            性别  (男|女)  #REQUIRED
            癖好 CDATA  #IMPLIED
    >

对应的 xml文件:

<?xml version="1.0" encoding="utf-8" ?>

<班级 编号="des3" 年级="大一" 学校='西工大' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
						 xmlns="http://www.example.org/student" 
						 xsi:schemaLocation=" http://www.example.org/student  student.xsd">
	<学生 编号="d3" 性别="" >
		<姓名>阿娇</姓名>
		<年龄>50</年龄>
		<身高>150</身高>
		<体重>40</体重>
		
	</学生>
	
	<学生 编号="df3" 性别="">
		<姓名>薛鹏</姓名>
		<年龄>55</年龄>
		
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值