XML概述
XML是一种可扩展标记(标签)语言(EXtensible MarkuP Language),类似于html,html的标签是定义好的,而XML中的标签是我们自己规定的.
XML 是一种标记(标签)语言
XML 标签没有被预定义。您需要自行定义标签。
XML 的设计宗旨是传输数据,而非显示数据 --- json代替xml的数据传递
注:html设计的宗旨是为了展示数据
XML 被设计为具有自我描述性(就是易于阅读)。
eg:不同语言之间数据传递,可借助于xml
==注意:==
XML 是 W3C 的推荐标准.
W3C在1988年2月发布1.0版本,2004年2月又发布1.1版本,但因为1.1版本不能向下兼容1.0版本,所以1.1没有人用。同时,在2004年2月W3C又发布了1.0版本的第三版。我们要学习的还是1.0版本。
XML作用
1.存储数据,传递数据的载体 --- json
==2.配置文件(★★★)==
XML入门
编写persons.xml文件
==XML组成==★
文档声明:
==格式: <?xml version="1.0" encoding="UTF-8"?>==
注: 文档声明必须放在文档的开头(首行首列)
verson: 版本号(一般采用1.0)
encoding: 当前文件的编码方式(UTF-8)
元素(标签):
概述:
元素指的就是xml中的标签,标签名称自定义
格式:
格式1: <person>标签体(元素体)</person> // 双标签 (围堵标签)
格式2: <person/> // 单标签(空标签)
注意事项:
1.标签名称==区分==大小写
2.不能使用空格,不能使用冒号
3.不建议以XML、xml、Xml开头
4.格式化良好的XML文档,有且仅有一个根元素。
格式:
<xxx 属性名="值" 属性名="值"></xxx>
<xxx 属性名="值" />
属性是元素的一部分,必须写在开始标签中
属性的定义格式:属性名=“属性值”,其中属性值必须使用单引或双引号括起来
一个元素可以有0~N个属性,但一个元素中不能出现同名属性
属性名不能使用空格 , 不要使用冒号等特殊字符,且必须以字母开头
注释:
对xml中标签的描述(程序员自己看的注释)
格式: <!-- 我是xml的注释 -->
转义字符:
xml中的特殊符号有特定的意义(eg : > < ),如果需要显示特殊符号需要转义
使用时参考文档即可
字符区(了解):
如果要显示的特殊符号较多,直接在字符区编写. 不需要在转义,字符区的内容不会被解析
格式: <![CDATA[文本内容]]>
注: CDATA 部分由 "<![CDATA[" 开始,由 "]]>" 结束;
小结:
xml组成:
文档声明:
<?xml version="1.0" encoding="utf-8" ?> : 首行首列
元素:
标签:
双标签
单标签
属性:
<xxx 属性名称="值" 属性名称="值" ..... ></xxx>
<xxx 属性名称="值" 属性名称="值" ..... />
注释:
<!-- -->
转义符:
> <
字符区:
<![CDATA[不会被转义的字符]]>
XML约束(了解)
DTD约束
DTD是文档类型定义(Document Type DeFinition)
概述
DTD 可以定义 XML 文档中出现的元素、这些元素出现的次序、它们如何相互嵌套以及XML文档结构的其它详细信息
扩展名: *.dtd
语法:(了解)
文档声明: 声明当前xml遵循的约束
方式1:内部DTD,在XML文档内部嵌入DTD,只对当前XML有效
<!DOCTYPE 根元素 [...//具体语法]><!‐‐内部DTD‐‐>
方式2:外部DTD—本地DTD,DTD文档在本地系统上,企业内部自己项目使用。
<!DOCTYPE 根元素 SYstem "bookshelf.dtd"><!‐‐外部本地DTD‐‐>
方式3:外部DTD—公共DTD,DTD文档在网络上,一般都有框架提供 , 也是我们使用最多的.
<!DOCTYPE web‐app PUBLIC "‐//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web‐app_2_3.dtd">
元素声明(了解)
约束元素的嵌套层级
<!ELEMENT 父标签 (子标签1,子标签2,…)>
约束元素体里面的数据
<!ELEMENT 标签名字 标签类型>
标签类型 代码写法 说明
PCDATA (#PCDATA) 被解析的字符串数据(字符串数据)
EMPTY EMPTY 即空元素,例如<hr/>
ANY ANY 即任意类型
数量词(掌握)
数量词符号 含义
* 表示元素可以出现0到多个
+ 表示元素可以出现至少1个
? 表示元素可以是0或1个
, 表示元素需要按照顺序显示
| 表示元素需要选择其中的某一个
<!ELEMENT 书架 (书+)> <!-- 约束根标签的名称为 "书架" 及子标签出现的次数-->
<!ELEMENT 书 (书名,作者,售价)><!--约束元素书的子元素必须为书名、作者、售价-->
<!ELEMENT 书名 (#PCDATA)> <!-- PCDATA: 约束标签体信息为字符串 -->
<!ELEMENT 作者 EMPTY> <!-- EMPTY: 约束当前标签为单标签-->
<!ELEMENT 售价 ANY> <!-- ANY: 标签类型任意 -->
属性声明(了解)
设置指定标签上的属性
格式: Attribute(属性)
<!ATTLIST 标签名称
属性名称1 属性类型1 属性说明1
属性名称2 属性类型2 属性说明2
…
>
数据类型:
属性类型 含义
CDATA 代表属性是文本字符串, eg:<!ATTLIST 属性名 CDATA 属性说明>
ID 代码该属性值唯一,不能以数字开头, eg:<!ATTLIST 属性名 ID 属性说明>
ENUMERATED 代表属性值在指定范围内进行枚举 Eg:<!ATTLIST属性名 (社科类|工程类|教育类) "社科
属性说明:
属性说明 含义
#required 代表属性是必须有的
#IMPLIED 代表属性可有可无
#FIXED 代表属性为固定值,实现方式:book_info CDATA #FIXED "固定值"
代码:
<!ATTLIST 书 // 被约束的标签
// 属性名 属性类型 描述
name CDATA #required // 属性
>
<!ATTLIST 书
id ID #required // ID: 约束当前属性值唯一
name CDATA #required // CDATA: 约束当前属性的值为字符串
出版社 (传智播客|北大|清华) #required // ENUMERATED: 枚举值
>
<!ATTLIST 书
id ID #required // #required: 约束该属性必须存在
name CDATA #IMPLIED // #IMPLIED: 约束该属性可有可无
出版社 (传智播客|北大|清华) "传智播客" // #FIXED: 设置默认值
>
小结:
约束元素的名称和次序,约束元素上的属性
一个xml文件只能被一个dtd文件约束
没有办法进一步约束标签体内容的类型,若要想约束标签体内容的类型,需要学习 schema约束
schema约束
概述:
Schema 比DTD强大,是DTD代替者
Schema 本身也是XML文档,Schema文档扩展名为xsd,而不是xml
Schema 功能更强大,数据类型约束更完善
==schema可以进一步约束标签体数据的类型==
约束文件后缀名
*.xsd
注意:
一个xml文件可以被多个schema文件约束,为了防止不同的约束文件中有相同名称的标签,我们采用命名空间
一个xml文件可以被多个schema文件约束.
为了区分不同的约束文件,我们可以给约束文件起别名
xmlns: xml namespace(命名空间)
引入schema约束文件方式:
xmlns: xml namespace
targetNamespace: 为约束文件设置名称(给约束文件起名称)
elementFormDefault:
qualified; 严格的语法格式
unqualified: 不严格的语法格式
解析XML
解析XML的多种方式
DOM:document
需要解析器把整个XML文档装载到内存,并解析成一个Document对象
优点:元素与元素之间保留结构关系,故可以进行增删改查操作。
缺点:XML文档过大,可能出现内存溢出
SAX(了解):
是一种速度更快,更有效的方法。它逐行扫描文档,一边扫描一边解析。并以事件驱动的方式进行具体解析,每执行一行,都触发对应的事件。(了解)
优点:处理速度快,可以处理大文件
缺点:只能读,逐行读取资源并释放资源,解析操作繁琐。
PULL(了解)
Android内置的XML解析方式,类似SAX。(了解)
==Dom4j==
解析xml步骤:
1.导入jar包
2.创建核心解析对象( SAXReader )
3.以流的方式读取被解析的xml文件 (document对象)
4.获取dom树中的元素,属性,文本信息.
常用API:
SAXReader对象★
SAXReader saxReader = new SAXReader(); //创建核心解析对象
Document document = saxReader.read("xml流");
Document:★
Element rootElement = document .getRootElement(); // 获取根元素对象
Element对象:
List elements([String ele] ) ★
获得指定名称的所有子元素。可以不指定名称
Element element(String ele)
获得指定名称第一个子元素。
String getName()
获得当前元素的元素名
String attributeValue(String attrName) ★
获得指定属性名的属性值
String elementText(Sting ele)
获得指定名称子元素的文本值
ele: 子标签名称
String getText() ★
获得当前元素的文本内容
Dom4J结合XPath解析XML
se: java.lang.
ee: javax..
使用步骤:
1:导入jar包(dom4j和jaxen-1.1-beta-6.jar)
2:通过dom4j的SAXReader获取Document对象
3:利用Xpath提供的api,结合xpath的语法完成选取XML文档元素节点进行解析操作。document常用的api
常用方法:
List selectNodes("表达式") 获取符合表达式的元素集合
Element selectSingleNode("表达式") 获取符合表达式的唯一元素
XPath语法(了解):
/ 根节点
// 任意节点
./ 当前节点
../ 当前节点的父节点
@ 选取属性
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。