XML学习小计

XML学习小计

xml,eXtensible Markup Language,可扩展标记语言。

一、特点:

1、xml是一种非常灵活的语言(跨平台),没有固定的标签,所有的标签都可自定义。

2、通常,xml被用于信息的记录和传递,因此,xml经常被用于充当配置文件

二、基本格式:

1、声明信息。(用于描述xml的版本和编码方式)

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

2、xml有且仅有一个根元素。(如下面的books元素)

3、xml中对大小写敏感

4、属性值要用双引号。 <a id='888'></a>

5、标签是成对的而且要正确嵌套。

6、注释写法:<!-- 这里是注释 -->和html一样

<?xml version="1.0" encoding="UTF-8"?> <!--这是一个声明 -->
<books>   <!--这是唯一的根元素-->
	<book id="b01">
        <name>把自己作为方法</name>
        <author>项飙</author>
        <price>50.5</price>
    </book>
    <book id="b02">
        <name>php从入门到精通</name>
        <author>明日科技</author>
        <price>99.8</price>
    </book>    
</books>

三、DTD

Document Type Definition,文档定义类型

1、用于约束xml的文档格式,保证xml是一个有效的xml。

2、DTD可以分为两种,内部DTD,外部DTD。

使用方式:

1、内部DTD:

  • 语法:

    <!DOCTYPE 根元素 [元素声明]>

  • 元素声明语法:

    <!ELEMENT 元素名称 类别>

​ 或 <!ELEMENT 元素名 (子元素[,子元素...])>

类别

​ EMPTY---------------------空元素

​ (#PCDATA)------PCDATA的元素(会解析标签)

​ (#CDATA)-------------忽略标签

​ ANY--------------------带有任何内容的元素

  • 数量词:

    ±----------------------表示出现至少一次

    ?----------------------表示出现0次或1次

    *-----------------------表示出现任意次

  • 属性声明语法:

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

    实例:

    <!ATTLIST payment type CDATA "check">

    image-20210218135242262 image-20210218135329384

    实例:

    <?xml version="1.0" encoding="UTF-8"?>
    <!--声明内部DTD-->
    <!DOCTYPE scores [
    	<!ELEMENT scores (student+)>   <!--表示元素名为scores,其子元素student至少出现一次-->
    	<!ELEMENT student (name,course,score)> <!--表示元素名为student, 其子元素name,course,score有且仅出现一次-->
    	<!ATTLIST student id CDATA #REQUIRED>  <!--表示student元素的id属性属性类型为CDATA,属性默认值为#REQUIRED-->
    	<!ELEMENT name (#PCDATA)>  <!--表示name元素的类别为PCDATA-->
    	<!ELEMENT course (#PCDATA)> <!--表示course元素的类别为PCDATA-->
    	<!ELEMENT score (#PCDATA)>  <!--表示score元素的类别为PCDATA-->
    ]>
    <scores>
    	<student id="1">
    		<name>王同</name>
    		<course>java</course>
    		<score>89</score>
    	</student>
    	<student id="2">
    		<name>李佳</name>
    		<course>sql</course>
    		<score>58</score>
    	</student>
    	<student id="3">
    		<name>张三</name>
    		<course>Oracle</course>
    		<score>40</score>
    	</student>
    </scores>
    

2、外部DTD

语法格式与内部DTD一样,区别就是另写一个.dtd文件,然后再xml文档中去引用。

  • 引用(声明)语法:

<!DOCTYPE 根元素 SYSTEM "文件名">

  • 实例:

-----------------------------scores.dtd文件

<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT scores (student+)> 
<!ELEMENT student (name,course,score)>
<!ATTLIST student id CDATA #REQUIRED>
<!ELEMENT name (#PCDATA)>
<!ELEMENT course (#PCDATA)>
<!ELEMENT score (#PCDATA)> 
<!--要注意有空格-->
<!--scores.dtd-->

----------------------------scores.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!--引入外部DTD文件-->
<!DOCTYPE scores SYSTEM "scores.dtd"> <!--scores为根元素,“scores.dtd”为文件名-->
<scores>
	<student id="1">
		<name>王同</name>
		<course>java</course>
		<score>89</score>
	</student>
	<student id="2">
		<name>李佳</name>
		<course>sql</course>
		<score>58</score>
	</student>
	<student id="3">
		<name>张三</name>
		<course>Oracle</course>
		<score>40</score>
	</student>
</scores>
<!--scores.xml-->
DTD实体

实体是用于定义引用普通文本或特殊字符的变量

实体引用是对实体的引用

实体可在内部或外部进行声明

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

DTD例子:

<!ENTITY writer "hello world">    <!--相当于定义了一个字符型的变量-->
<!ENTITY copyright "hello girl">

XML例子:

<suibianxie>&writer;&copyright;</suibianxie>  <!--&writer是对上面变量的引用-->

四、XSD

XML Schema 是DTD的替代者(升级版)

XSD本身也是XML文档

采用XML文档来定义语义约束,比DTD要复杂一些,但功能强大的多。

功能比较强大:

相比DTD,不仅可以定义XML文档的结构,还可以规范文档的内容

1、支持丰富的数据类型

2、允许开发者自定义数据类型

3、可读性强

4、可针对未来需求进行扩展

A、常见的xml解析技术

xml的解析:对xml文件进行操作,包括创建xml、对xml文件进行增删改查操作。

1、DOM解析

官方提供的解析方式,基于xml树解析的

2、SAX解析

民间的解析方式,基于事件的解析

3、JDOM解析

第三方提供的,开源免费的解析方式,比DOM解析块

4、DOM4J解析(比较先进)

第三方提供,开源免费,是JDOM的升级版

性能优异,功能强大,极其易使用

B、DOM4J解析XML

解析xml的入门,是需要先拿到一个Document对象

猜你喜欢

转载自blog.csdn.net/qq_43665434/article/details/113855248