加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

XML知识点总结

发布时间:2020-12-16 00:07:37 所属栏目:百科 来源:网络整理
导读:1、XML 简介 XML是 :可扩展标志性语言(extendsible Markup Language)xml是w3c(万维网联盟,WEB技术最权威的国际中立性的技术标准机构)组织发布的技术 xml 有两个版本 1.0 1.1,这里需要注意的是我们使用的是使用1.0 版本(1.1不能向下兼容)。 先来解释一下

1、XML 简介

XML是 :可扩展标志性语言(extendsible Markup Language)xml是w3c(万维网联盟,WEB技术最权威的国际中立性的技术标准机构)组织发布的技术

xml 有两个版本 1.0 1.1,这里需要注意的是我们使用的是使用1.0 版本(1.1不能向下兼容)。

先来解释一下这个可扩展标志性语言是什么意思:

标记型语言 :html是标记型语言、使用标签操作。
可扩展:html里的标签都是固定的,每个标签都有特定的含义,XML 不是固定的,标签可以自己定义,比如可以写中文的标签<人></人> <person></person>
既然我们要学习XML,就需要知道xml 的用途
** HTML 用以显示数据,XML也可以显示数据,但不是主要功能
** XML 主要功能是 存储数据

2、XML的应用

在实际开发中我们主要把XML实现如下的功能:

不同系统之间传输数据,数据结构清晰,利于维护,用来表示生活中有关系的数据,经常用在配置文件,比如现在连接数据库,肯定要知道数据库IP地址用户名密码等,直接 写程序中不好维护, 单独放在一个配置文件中利于维护


3、XML的语法

要学习会使用XML就必须得会下面几点。

(1) xml的文档声明

* 创建一个文件 后缀名是 .xml
* 如果写xml,第一步必须有一个文档声明(表示这是一个xml文档)
 <?xml version="1.0" encoding="utf-8"?>
*** 文档声明必须是文档的第一行,并且是第一列

关于头文件属性的解释:
- version:xml的版本 1.0(文中使用的版本) 1.1
- encoding: xml编码 gbk utf-8 iso8859-1(不包含中文) 等等,这个编码指定打开该文件时读取文件内容的编码,不是保存的编码

- standalone:是否需要依赖其他文件yes/no


* xml中文乱码的问题
编辑好xml文件后->默认按系统编码保存,通常是gbk -> 然后打开xml的时候,打开程序(例如IE)根据xml文件的encoding编码去解码
此时如果encoding 指定的编码跟保存时编码不一致,就会出问题,解决的办法是让 保存时和打开时的编码都一致

(2) 定义元素(标签)

** 标签定义要符合如下的规定:
标签定义有开始必须要有结束:<person></person>
标签没有内容的可以在标签内结束<person value="as"/>
标签可以嵌套,但必须合理,例如下面这个例子:
合理:<a><b></b></a>

不合理: <a><b></a></b>

**xml标签命名规则
(1) xml中区分大小写,<i>和<I>是两个不同标签
(2) 标签名称不能以数字或下划线开头
(3) 不能以xml 以及xml大小写开头,这是不允许的,<xmla> <Xmlb> <XMLx> 这些都是不允许
(4) 标签名称不能包含空格和冒号 如 <a b> <a:b>都不对

标签的定义还得注意以下几个:

** 一个xml中, 只能有一个根标签,其他标签都是根标签下的标签

** 在xml中把换行和空格都当成内容来解析


下面两段代码含义不一样
          <a>1111</a>
              <a>
                 1111
              </a>
(3) 定义属性
上面已经说到xml是标记型文档,所以和HTML一样可以有属性,接下来我们就说如何定义属性:
<person id="aaa" />

** 属性定义的要求
(1) 一个标签可以有多个属性,比如:<person id="aaa" xx="aaa"></person>
(2) 属性名称不能相同
(3) 属性名和属性值之间使用= ,属性值使用引号包起来(可以使单引号,也可以双引号)

(4) 属性名称规范和元素规范一致


(4) 注释

* XML注释的写法: <!--xml的注释-->
** 注意的地方
*** 注释不能嵌套,<!--<!---->-->这个是错误的

*** 注释不能放在文档的第一行,因为第一行是文档声明


(5) 特殊字符
** 特殊字符和html的特殊字符一样处理,这里也不过多说明了。

(6) CDATA 区
这个的功能是可以解决多个字符需要转义的操作,把这些内容放到CDATA区就不需要一个个转义了,这个也很少用到。
** 写法<![CDATA[内容]]>,如:<![CDATA[a<b,a>b]]>

** CDATA 区会把特殊字符当文本内容,而不是标签


(7) PI指令
这个指令的功能是 可以在xml中设置样式
* 写法: <?xml-styleheet type="text/css" href="css路径"?>
注意: 只对英文标签名称起作用

(8) xml的约束
对元素严格规定,比如规定一个<persons>下面直接子节点只能是<person> 而不能是<猫>

*约束技术 DTD 和schema,



4、DTD 快速入门 查看文档
DTD(文档类型定义)的作用是定义 XML 文档的合法构建模块。它使用一系列的合法元素来定义文档结构。这里我也不多说了,这个可以看文档的,可以看文档或者百度百科学习。
5、DTD的三种引入方式
(1) 引入外部的dtd文件

<!DOCTYPE 根元素名称 SYSTEM "dtd文件路径">


(2) 使用内部的DTD文件

<!DOCTYPE 根元素名称 [
<!ELEMENT person(name,age)>
<!ELEMENT name(#PCDATA)> //表示在<name>和</name>标签之间可以插入字符或者子标签。
<!ELEMENT age(#PCDATA)>
]>

#PCDATA (Parsed Character Data 被解析的字符数据 任何)


(3) 使用外部的dtd文件(网络上的dtd文件)
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

"http://struts.apache.org/dtds/struts-2.0.dtd">


6、使用DTD定义元素

DTD 语法:<!ELEMENT 元素名 约束>


(1)简单元素没有子元素的元素

简单元素结构如下

<!ELEMENT name (#PCDATA)>

(#PCDATA) :表示在<name>和</name>标签之间可以插入字符或者子标签
EMPTY:元素为空(没有内容)

ANY : 任意


(2)复杂元素

复杂元素结构如下

<!ELEMENT person (name,age,sex)> //注意空格

<!ELEMENT 元素名称 (子元素)>
用下列符号 表示子元素出现的次数:
+:表示一次或多次
?:表示零次或一次
*:表示零次或多次

子元素之间用逗号隔开表示元素出现的顺序,如:<!ELEMENT person (name+,age?,sex*)>

子元素与出现次数之间用|隔开.表示元素只能出现其中的任意一个,如:<!ELEMENT person (name+|age?|sex*)>

7、使用DTD来定义属性

定义属性语法: <!ATTLIST 元素名称 属性名称 属性类型 属性的约束 >

而其中属性类型有三种

- CDATA :字符串,如: <!ATTLIST person id1 CDATA #REQUIRED>

- 枚举 :表示只在一定范围内出现的值,而且每次出现其中一个,如: <!ATTLIST person id1 (AA|BB|CC) #REQUIRED>

- 值只能是字母或者下划线开头,如: <!ATTLIST person id1 ID #REQUIRED>

其中的属性的约束有三种
- #REQUIRE D 必须要存在
- #FIXED :表示一个固定值 #FIXED "AAA", 属性值必须 是设置的固定值
- 直接值 默认值
不写属性 ,使用直接值
写了属性,使用设置的那个值
<!ATTLIST person id1 CDATA "AAA">

8、实体的定义
实体定义语法语法 :<!ENTITY 实体名称 "实体值">
使用实体 &实体名称
注意:定义的实体需要写在内部DTD中,如果写在外部DTD,某些浏览器下可能得不到

9、XML的解析(重要)
我们都知道js使用DOM -- document object model 来解析HTML
- document 、element对象、属性对象、文本对象、Node节点对象
xml 解析技术: dom 和 sax
(1)dom解析
根据xml的层级结构在内存中分配一个树形结构,把xml的标签,属性,文本都封装为对象
缺点,如果文件过大会造成内存溢出
优点 , 方便实现增删改操作
(2)sax 解析
采用事件驱动,边读边解析,从上到下,一行一行的解析
缺点 :不能实现增删改操作
优点 :如果文件过大,不会造成内存溢出,方便实现查询操作
常用的解析器有 Dom4j,提供dom和sax两种方式的解析器


10、schema约束 为替代DTD存在
dtd语法 :<!ELEMENT 元素名称 约束>
schema符合XML语法,是XML语句, 一个xml中可以有多个schema,多个schema用命名空间区分(类似JAVA的包名), dtd里有PCDATA类型,但是在schema中可以支持更多数据类型, 比如年龄 只能是整数 ,在schema中可以直接定义一个整型类型, schema语法更加复杂, 目前还不能代替dtd

schema的快速入门
创建一个schema文件 后缀名是.xsd, 根节点<schema>

在schema文件里面
属性xmlns = "http://www.w3.org/2001/XMLSchema"; //表示你创建的是一个约束文档
属性tagetNamespace = "http://www.chj.com/2014"; //命名空间,如果要使用约束文件,直接通过这个地址引入
//当设置为unqualified时全局元素(可作为根元素)必须添加命名空间前缀,非全局元素不必添加前缀。
属性elementFormDefault="qualified" // 当设置为qualified时,所有的元素都必须添加前缀。

步骤
(1)、看xml中有多少个元素 <ELEMENT>
(2)、看简单元素和复杂元素
          <element name="person">
                    <complextype> //如果是复杂元素
                        <sequence>
                            <element name="name" type="string"></element>
                            <element name="age" type="intger"></element>
                        </sequence>
                    </cpmplextype>
                </element>


(3)、在被约束的文件中引入约束文件
<person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" //instance表示这是一个被约束的文件,两个xmlns所以这里要取个xsi作为前缀区分
xmlns="http://www.luowg.com/2014"//是约束文件里的 targetNamespace

xsi:schemaLocation="http://www.luowg.com/2014 xx.xsd">//targetNamespace 空格 约束文件的路径

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读