首页 > 代码库 > xml

xml

          xml

1、简介:可扩展标记型语言

   标记型语言:html也是

-          - 也是使用标签来操作

   可扩展

-          html里面的标签是固定的,每个标签都有特定的含义

-          xml标签可以自己定义 可以写中文的标签

 2、xml用途

   html为了显示数据,xml也可以显示数据,但是最重要的是存储数据。

 xml我w3c组织发布的技术。有2个版本:1.0和1.1  都使用1.0版本,1.1不能向下兼容。

3、xml的运用

  -不同的系统之间传输数据  (比如QQ文件的传输)

  -用来表示生活中有关系的数据  (比如国家下面的城市)

  -经常用在文件配置

4、xml的语法

 (1)xml的文档声明

   -创建一个文件,后缀名是.xml

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

格式: <?xml version=”1.0” encoding=”gbk/utf-8”?>  注意空格,一定要有       文档声明必须写在第一行第一列

 属性

   -version:xml的版本1.0

   -encoding:xml编码  gbk、utf-8、iso8859-1(不包含中文)

   -standalone:是否需要依赖其他文件  yes/no  比较少用到

xml的中文乱码问题解决

设置保存时候的编码方式和打开时候的编码方式一致

 (2)定义元素(标签)

 和html的标签一样

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

命名规则

1、xml代码区分大小写 

2、不能以数字或者下划线_开头 

3、不能以xml开头(大小写都不可以)

4、不能包含空格和冒号:

 (3)定义属性

命名规则与标签的命名规则是相同的

 (4)注释

写法: <!—xml的注释-->

 注释不能嵌套,也不能放到第一行第一列, 那个位置是放文档声明的位置

 (5)特殊字符

<:&lt;  >:&gt;  前面2个比较常用  ”:&quot;  ’:apos;   &:&amp;   

(6)CDATA区  了解

可以解决多个特殊字符都需要转义的操作,就是把这些内容放在CDATA区里面,就不需要转义了

写法:<![CDATA[  内容    ]]> 空格不用管

(7)PI指令(处理指令)  很少用

可以在xml中设置样式

写法:<?xml-stylesheet type=“text/css” href=http://www.mamicode.com/“css的路径”?>

设置样式,只能对英文标签名称起作用,对于中文标签名称不起作用

5、xml的约束

因为要符合常理,比如人有名字和年龄这些属性,但是不能有猫狗这些属性,所以需要进行约束

 xml的约束的技术:dtd约束和schema约束

6、dtd约束的快速入门

步骤(1)、创建一个文件  后缀名是.dtd

(2)、看xml中有多少个元素,有几个元素,就写几个<!ELEMENT>

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

   -简单元素:没有子元素  <!ELEMENT 元素 (#PCDATA)>

   -复杂元素:有子元素  <!ELEMENT 复杂元素 (子元素,子元素..)> 没有孙子辈的元素,只有儿子的元素

(4)、需要在xml文件中引入dtd文件

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

 myeclipse工具进行检验 

ctrl+shift+/  注释的快捷键

7、dtd的三种引入方式

(1)  外部引入方式

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

(2)  使用内部的dtd文件   个人建议使用这个,就不用重新创建文件了

  如-<!DOCTYPE 根元素名称 [

<!ELEMENT person (name,age)>   记得空格

<!ELEMENT name (#PCDATA)>

<!ELEMENT age (#PCDATA)>

]>

(3)  使用外部的dtd文件(网络上的dtd文件)

<!DOCTYPE 根元素 PUBLIC “dtd名称” “dtd文件的路径”>

8、使用dtd定义元素

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

简单元素的约束

  (#PCDATA):约束的内容是字符串类型

   EMPTY:元素为空

   ANY:元素为任意

复杂元素的约束

  <!ELEMENT 复杂元素 (子元素)>

表示子元素出现的次数  这些符号是在子元素后面添加的

+:表示一次或者多次 

?:表示0次或者1次 

*:表示0次或者多次

子元素使用逗号,进行隔开  表示元素出现的顺序

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

9、使用dtd定义属性

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

属性名称随便写

  属性类型

   CDATA:字符串

   枚举比如(aa|bb|cc):表示只能在一定的范围内出现,每次只能出现其中的一个 如

   ID:值只能是字母或者下划线开头

属性的约束

 #REQUIRED:属性必须存在

#IMPLIED:属性可有可无

#FIXED:表示一个固定值 比如 #FIXED “AAA” 那么属性值必须是“AAA”

直接值:如果不写属性,会使用直接值;如果写了属性,那么会使用属性的那个值

 

10、定义实体

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

 比如 <!ENTITY test “haha”>

  使用实体 &实体名称;   比如&test;

注意:定义实体需要写在内部dtd里面

11、xml的解析  重要

xml的解析方式(技术):dom和sax

dom解析xml的时候,如果文件过大,会造成内存溢出;但是可以实现增删改操作。

sax是边读边解析,所以不会造成内存溢出;但是不能实现增删改操作。

 

 想要解析xml,需要解析工具:jaxp、dom4j(用得最多的)、jdom

-jaxp解析器在jdk的javax.xml.parsers包里面

  一共4个类,分别针对dom和sax解析使用的类

dom:

-DocumentBuilder:解析器类

 -这个类是一个抽象类,不能new,可以从DocumentBuilderFactory.new DocumentBuilder()方法获取

一个方法,可以解析xml:parse(“xml路径”),返回的是Document 整个文档

返回的Document是一个接口,父接口是Node

 方法:js里面有的这里面都有 (getElementsByTagName返回的是NodeList)

NodeList里面的方法

  getLength:得到数组的长度

  item(int index):根据下标得到具体的值。

 

  DocumentBuilderFactory:解析器类工厂

xml