1.XML

Xml


extendsible mwrkup language 可扩展的标记语言

XML 有什么用?

①可以用来保存数据

②可以用来配置文件

③数据传输载体

定义xml

1.文档说明

  • 简单声明,version: 解析这个xml的时候,使用什么版本的解析器解析

    <?xml version="1.0" ?>

  • encoding : 解析xml中的文字时,使用什么编码来翻译

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

  • standalone : no - 该文档会依赖关联其他文档,yes - 这是一个独立的文档

    <?xml version="1.0" encoding="UTF-8" ? standalone="no">

2.encoding详解

解析xml时,使用什么编码解析 --解码

存储的文字所对应的二进制,是根据文件所使用的编码来得到的

默认文件保存的时候,使用的是GBK的编码保存

  • 所以要想让我们的xml能够正常的显示中文,有两种解决方法:

    ①让encodiong是gdk,或gb2312

    ②如果encoding是utf-8,那么保存文件的时候也必须使用utf-8

保存的时候见到的ANSI对应的其实是我们本地编码GBK`

3.元素定义

①其实就是标签,<>括起来的都叫元素。标签都是成对出现的,如

②文档声明下的第一个元素叫做根元素(根标签)

③标签里面可以嵌套标签

④空标签

     即是开始,也是结束,一般配合属性来用     
     <stu>
         <name>张三</stu>
         <age/>
     </stu>

⑤标签可以自定义

    命名规则:
        名称可以含字母、数字以及其他字符
        名称不能以数字或者标点符号开始
        名称不能包含空格

4.简单元素 & 复杂元素

  • 简单元素

元素里面包含了普通的文字

  • 复杂元素

元素里面还可以嵌套其他的元素

5.属性的定义

定义在元素里面,<元素名称 属性名称=“属性的值”><元素名称/>

    <stu id="10001">
         <name>张三</name>
    </stu>

6.注释

与html的注释一样

<!--  -->
如: <!-- 这是一条注释 -->

xml的注释,不允许放置在文档的第一行,必须在文档声明的下面

CDATA区

  • 非法字符
   严格的讲,在xml中仅有字符“<”和“&”是非法的。可将其替换为实体引用
   <  &lt
   &  &amp

如果某段字符串里面有过多的字符,并且里面包含了类似标签或者关键字,不想让xml的解析器去解析,可以使用CDATA来包装。

<![CDATA[]]> 如:<dress><![CDATA[<a href="http://baidu.com">百度</a>]]><dress/>

XML 解析

其实就是获取元素里面的字符数据或者属性数据

1.解析方式

有多种,常用的有两种

  • DOM

DOM : dociment.把整xml全部读到内存中,形成树状结构。整个文档称之为document对象,属性对应Attribute对象,所有的元素结点对应Element对象,文件也可称之为Text对象,以上所有的对象可以称之为Node节点。如果xml特别大,讲造成内存溢出。可以对数据进行增删操作。

在这里插入图片描述

  • SAX

SAX : Simple API for xml 基于事件驱动。读一行,解析一行。不会造成内存溢出,不可以进行增删,只能查询。

2.Dom4j 基本用法

<stu>
        <name>张三</name>
        <age>18</age>
        <adress>北京</adress>
   </stu>
   <stu>
        <name>李四</name>
        <age>17</age>
        <adress>上海</adress>
   </stu>
<!-- 1.创建sax读取对象 -->
SAXReader reader = new SAXReader();

<!-- 2.指定解析的xml源 -->
Document document = reader.read(new file("src/xml"));

<!-- 3.得到根元素 -->

ELement rootElement = document.getRootElement();

<!-- 4.获取根元素下的子元素age -->

rootELement.emelent("stu").element("age").getText();

<!-- 5.遍历所有stu子元素 -->

for(Element element : elements){
    String name = element.element("name").getText();
    String age = element.element("age").getText();
    String address = element.element("address").getText();
    }

3.Dom4j 的 Xpath使用

dome4j里面支持Xpath的写法。Xpath其实是xml的语言路径,支持我们在解析xml的时候,能够快速的定位到具体的某一个元素。

①添加jar包支持

②在查找制定节点是,根据Xpath语法规则来查找

③后续的代码与之前的解析代码一样

在这里插入图片描述

4.XML 约束

DTD元素

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

<!ELEMENT 元素名称 (子元素名称 1,子元素名称 2,.....)> --带有子元素(序列)的元素,有顺序要求

<!ELEMENT 元素名称 (子元素名称 1|子元素名称 2)> --声明“非…/既…”类型的内容

<!ELEMENT 元素名称 (子元素名称+)> --声明最少出现一次的元素

<!ELEMENT 元素名称 (子元素名称*)> --声明出现零次或多次的元素

<!ELEMENT 元素名称 (子元素名称?)> --声明出现零次或一次的元素

DTD属性

<!ATTLIST 元素名称 属性名称 属性类型 默认值> --属性声明

属性类型:
    CDATA 值为字符数据 (character data) 
    (en1|en2|..) 此值是枚举列表中的一个值 
    ID 值为唯一的 id 
    IDREF 值为另外一个元素的 id 
    IDREFS 值为其他 id 的列表 
    NMTOKEN 值为合法的 XML 名称 
    NMTOKENS 值为合法的 XML 名称的列表 
    ENTITY 值是一个实体 
    ENTITIES 值是一个实体列表 
    NOTATION 此值是符号的名称 
    xml: 值是一个预定义的 XML 值 
默认值:
    #REQUIRED 属性值是必需的 
    #IMPLIED 属性不是必需的 
    #FIXED value 属性值是固定的 

stus.dtd
<!ELEMENT stus (stu*)>
<!ELEMENT stu (name,age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ATTLIST stu id CDATA #IMPLIED>

引入DTD

  • 引入网络DTD
<!-- 文档类型 根标签名字 网络上的dtd dtd名称 dtd路径 -->
<!DOCTYPE stu PUBLIC "//UNKNOWN/" "unkmown.dtd" >
  • 引入本地DTD
<!-- 文档类型 根标签名字  dtd路径 -->
<!DOCTYPE stu SYSTEM "stu.dtd" >
  • 直接内嵌DTD
<!DOCTYPE stus [
     <!ELEMENT stus (stu*)>
<!ELEMENT stu (name,age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ATTLIST stu id CDATA #IMPLIED>
]>

5.XSD - 元素

一个 schema 声明往往看上去类似这样:

  <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
  targetNamespace="http://www.w3school.com.cn"
  xmlns="http://www.w3school.com.cn"
  elementFormDefault="qualified">

xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"显示 schema 中用到的元素和数据类型来自命名空间 “http://www.w3.org/2001/XMLSchema”.同时它还规定了来自命名空间 “http://www.w3.org/2001/XMLSchema” 的元素和数据类型应该使用前缀 xs:

targetNamespace="http://www.w3school.com.cn"显示被此 schema 定义的元素 (note, to, from, heading, body) 来自命名空间: “http://www.w3school.com.cn”。

xmlns="http://www.w3school.com.cn"指出默认的命名空间是 “http://www.w3school.com.cn”。

elementFormDefault="qualified"指出任何 XML 实例文档所使用的且在此 schema 中声明过的元素必须被命名空间限定。

在 XML 文档中引用 Schema:

<note xmlns="http://www.w3school.com.cn"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3school.com.cn note.xsd">

<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

xmlns="http://www.w3school.com.cn"规定了默认命名空间的声明。此声明会告知 schema 验证器,在此 XML 文档中使用的所有元素都被声明于 “http://www.w3school.com.cn” 这个命名空间。

②有了可用的 XML Schema 实例命名空间:xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance",就可以使用 schemaLocation 属性了。此属性有两个值。第一个值是需要使用的命名空间。第二个值是供命名空间使用的 XML schema 的位置:xsi:schemaLocation="http://www.w3school.com.cn note.xsd"

schema中元素声明
在这里插入图片描述

名称空间的作用

一个xml可以引用多个schema约束,但只等阴影一个DTD约束。

名称空间的作用就是在写元素的时候,可以指定该元素使用的是哪一套约束规则。默认情况下,如果只有一套规则,那么可以这么写:

<!-- 单个 -->
<name>张三</name>
<!-- 多个 -->
<aa:name>张三</aa:name>
<bb:name>李四</bb:name>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值