JavaWeb基础篇(四)--xml

前言:学习xml基础的代码和相关jar包,chm文件都在GitHub中,链接如下:

https://github.com/litBlue/xml-study.git

一、xml的应用

1.不同的系统之间传输数据

2.用来表示生活中有关系的数据

3.经常用在文件配置

二、xml的语法

1.xml的文档声明

(1)一定要放在第一行

(2)创建一个文件,后缀名是 .xml

(3)如果写xml,必须要有一个文档声明(写了文档声明之后,表示写xml文件的内容)

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

2.定义元素(标签)

(1)形式: <person></person>   或 <person/>

(2)标签可以没有内容,可以在标签内结束

(3)标签可以嵌套

(4)命名规范:

 区分大小写

 不能以数字和下划线开头

 不能以xml,XML,Xml 开头

 不能包含空格和冒号

 可以是中文

(5)一个xml文档有且只能有一个根标签,其他标签要在根标签内

**注意:

       在xml中,空格和换行都会被当做原始内容处理。

3.定义属性

(1)一个标签上可以有多个属性

(2)属性名不能相同

(3)属性值用单引号或者双引号包起来

(4)命名规范与定义元素的相同

4.注释      <!--  -->

5.特殊字符

*转义与html中相同

6.CDATA区(了解)

(1)可以解决多个字符都需要转义的操作,把这些内容放在CDATA区中就不需要转义了

(2)写法: <![CDATA[ 内容 ]]>

(3)把特殊字符当做文本内容,而不是标签

7.PI指令 (了解)

(1)可以在xml设置样式

(2)写法:

    <?xml-stylesheet type="text/css" href="css的路径"?>

三、xml的约束

1.应用

xml标签是自定义的,需要技术来规定xml中只能出现的元素,这时候就需要约束

2.xml的约束常用的技术: dtd schema

四、dtd的使用

1.创建一个dtd文件,后缀名为 .dtd

2.具体步骤

  (1)看xml中有多少元素,有几个元素就添加几个<!ELEMENT>

  (2)判断元素是简单元素还是复杂元素

              -复杂元素:有子元素的元素

                     <!ELEMENT 元素名称  (子元素)>

              -简单元素:没有子元素

                     <!ELEMENT 元素名称 (#PCDATA)>

  (3)需要在xml引入dtd文件

                    

eg:xml:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE person SYSTEM "test.dtd">
<person>
    <name>zs</name>
    <age>20</age>
</person>

dtd:

<!ELEMENT person (name,age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>

3.注意:

       打开xml文件使用浏览器打开的,浏览器只校验语法,不检验约束,可以使用编译器。

4.dtd的三种引入方式

 (1)引入外部的dtd 文件,如上例

     <!DOCTYPE person SYSTEM "test.dtd">

  (2)引入内部的文件

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE person [
    <!ELEMENT person (name,age)>
    <!ELEMENT name (#PCDATA)>
    <!ELEMENT age (#PCDATA)>
]>

<person>
   <name>zs</name>
   <age>20</age>
</person>

  (3)使用网络上的dtd

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

5.使用dtd定义元素

 (1)语法: <!ELEMENT 元素名 约束>

 (2)简单元素:没有子元素的元素

       <!ELEMENT name (#PCDATA)>

              *** (#PCDATA): 约束name 是字符串类型

              ***EMPTY : 元素为空(没有内容)

              ***ANY::任意

 (3)复杂元素:

       <!ELEMENT 元素名称 (子元素)>

       -表示子元素出现的次数

              +  表示出现一次或者多次

              ?   表示出现0次或者1次

              *   表示出现0或者多次 

              若未出现上述中的任何一个,表示必须且只能出现一次

eg:

 <!ELEMENT person (name+,age?,addres*)>

       -子元素直接使用逗号隔开,表示元素出现的顺序

       -子元素直接使用 | 隔开,表示元素只能出现其中任意的一个

6.使用 dtd 定义属性

       -语法:

              <!ATTLIST 元素名称

                            属性名称  属性类型  属性的约束

              >

              -属性值类型

                     CDATA :表示字符串

                     枚举:表示只能在一定的范围内出现值,但是只能每次出现其中的一个

                            红绿灯效果

                     ID:表示属性的取值只能是字母或下划线

              -属性的约束

   #REQUIRED:表示该属性必须出现

   #IMPLIED:表示该属性可有可无

   #FIXED:表示属性的取值为一个固定值。语法:#FIXED "固定值"

   直接值:表示属性的取值为该默认值

eg:

<!ATTLIST 商品

       类别 CDATA #REQUIRED 必须的
       颜色 CDATA #IMPLIED  可选的

> 

对应的XML为:<商品 类别=“服装” 颜色=“黄色”/> 

7.实体的定义

  语法: <!ENTITY 实体名称 "实体的值">

  使用实体  &实体名称;

  注意:

   定义实体需要卸载内部 dtd里面,如果写在外部的dtd里面,在某些浏览器下得不到

五、xml的解析

1.xml是标记型文档,解析xml的技术有 dom 和 sax

       dom方式解析

              *根据xml的层级结构在内存中分配一个树形结构,把xml的标签,属性和文本都封装成对象。

              *优点:方便实现增删改操作

              *缺点:如果文件过大,容易造成内存溢出

       sax方式解析:

              *采用事件驱动,边读边解析

                     -从上到下,一行一行的解析,解析到某一个对象,返回对象名称

              *优点:文件过大不会溢出,方便实现查询操作

              *缺点:不能实现增删改操作

六、实现增删查改操作

具体的操作在顶部提供的代码链接中

七、schema的约束

1.schema文件自身就是一个xml文件,但是扩展名通常为 .xsd

       其也必须要有一个根节点,但是这个根节点的名称为schema

2.一个xml中可以有多个schema,多个schema使用名称空间分区(类似于Java包名)

3.dtd 里面有PCDATA类型,但是在schema中可以支持更多的数据类型

八、schema的快速入门

1.创建一个schema文件,后缀为 .xsd

2.在schema中,

-属性 xmlns="http://www.w3.org/2001/XMLSchema" 表示当前xml文件是一个约束文件

-targetNamespace="http://www.litBlue.cn/zcm"  表示使用schema约束文件,直接通过这个地址引入约束文件

-elementFormDefault="qualified" 

3.步骤

  (1)看xml中有多少个元素

             <element>

  (2)看简单元素和复杂元素

              *如果是复杂元素

          <complexType>
                <sequence>
            子元素
          </sequence>
        </complexType>
           

              *如果是是简单元素,写在复杂元素里面

<element name="person">
   <complexType>
     <sequence>
       <element name="name" type="string"></element>
       <element name="age" type="int"></element>
     </sequence>
   </complexType>
 </element>

4.在被约束文件中引入.xsd文件

<person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  xmlns="zcm"
  xsi:schemaLocation="zcm SchemaDemo.xsd">
     <name>张三</name>
     <age>18</age>
 </person>

-- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

表示xml是一个被约束的文件

-- xmlns="zcm"
是约束文档里面的targetNamespace

-- xsi:schemaLocation="zcm SchemaDemo.xsd"

  targetNamespace   空格   约束文档的地址路径

5.复杂元素指示器

表示元素出现的顺序

   表示元素只能出现一次

   元素只能出现其中的一个

maxOccurs="unbounded" :表示元素不限制出现的次数

表示任意元素

6.可以约束属性

(1)写在复杂元素里面

(2)写在 之间

(3)写法:

   <attribute name="id1" type="int"  use="requried"></attribute>

              -name:属性名称

              -type:属性类型 int string

              -use 属性是否必须出现 required

7.引入多个schema:

九、sax解析

1.sax:事件驱动,边读边解析

       在javax.xml.parsers包中

       -SAXParser:此类实例可以从 SAXParserFactory.newSAXParser() 方法获得

       -SAXParserFactory

              实例newInstance();  方法获得

sax执行过程:

       -当解析到开始标签的时候,自动执行 startElement方法

       -当解析到文本的时候,自动执行characters方法

       -当解析到结束标签的时候,自动执行endElement方法

2.使用jaxp的sax方式解析xml

-sax 方式不能实现增删改操作,只能做查询

-执行parse方法,第一个参数是路径,第二个参数是事件处理器

-实例看代码

十、使用dom4j解析xml

1.了解: dom4j是一个组织,针对xml解析,提供dom4j解析器

       dom4j 不是javaee的一部分,需要导入jar包

 2.具体资料,代码在链接中

十一、使用dom4j支持xpath的操作

       可以直接获得某个元素

       第一种形式 : 

              /AAA/DDD/BBB : 表示一层一层的,AAA下面的DDD下面的BBB

       第二种形式:

              //AAA   表示所有的AAA

       第三种形式:

              //AAA/*   表示AAA下面的所有元素

       第四种形式:

              BBB[1]  表示第一个

              BBB[last()]  表示最后一个

       第五种形式:

              //BBB[@id] 

注意:

默认情况下。dom4j不支持xPath

如果想要使用,需要导入jar包,使用 jaxen-1.1-beta-6.jar

猜你喜欢

转载自blog.csdn.net/weixin_43815050/article/details/87002501