xml笔记.docx

上传人:b****1 文档编号:569436 上传时间:2023-04-29 格式:DOCX 页数:66 大小:76.95KB
下载 相关 举报
xml笔记.docx_第1页
第1页 / 共66页
xml笔记.docx_第2页
第2页 / 共66页
xml笔记.docx_第3页
第3页 / 共66页
xml笔记.docx_第4页
第4页 / 共66页
xml笔记.docx_第5页
第5页 / 共66页
xml笔记.docx_第6页
第6页 / 共66页
xml笔记.docx_第7页
第7页 / 共66页
xml笔记.docx_第8页
第8页 / 共66页
xml笔记.docx_第9页
第9页 / 共66页
xml笔记.docx_第10页
第10页 / 共66页
xml笔记.docx_第11页
第11页 / 共66页
xml笔记.docx_第12页
第12页 / 共66页
xml笔记.docx_第13页
第13页 / 共66页
xml笔记.docx_第14页
第14页 / 共66页
xml笔记.docx_第15页
第15页 / 共66页
xml笔记.docx_第16页
第16页 / 共66页
xml笔记.docx_第17页
第17页 / 共66页
xml笔记.docx_第18页
第18页 / 共66页
xml笔记.docx_第19页
第19页 / 共66页
xml笔记.docx_第20页
第20页 / 共66页
亲,该文档总共66页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

xml笔记.docx

《xml笔记.docx》由会员分享,可在线阅读,更多相关《xml笔记.docx(66页珍藏版)》请在冰点文库上搜索。

xml笔记.docx

xml笔记

XML语言

XML语言和作用

(1)什么是XML

什么时XML,为什么学习XML?

ExtensibleMarkupLanguage,翻译过来为可扩展标记语言。

XML技术是w3c组织发布的,目前推荐遵循是w3c组织于2000发布的xml1.0规范。

XML技术用于解决什么问题?

XML语言出现的根本目标在于描述生活中数据于数据之间的关系。

在XML语言中,它允许用户定义标签。

一个标签用于描述一段数据;一个标签可分为开始标签和结束标签,在开始标签和结束标签之间,又可以使用其它标签描述其它数据,以此来实现数据关系的描述。

例如:

xmlversion=”1.0”encoding=”UTF-8”?

>

<中国>

<北京>

<海淀>

<丰台>

<湖南>

<武汉>

<荆州>

(2)XML常见应用

XML技术除用于保存有关系的数据之外,它还经常用作软件配置文件,以描述程序模块之间的关系。

在一个软件系统中,为提高系统的灵活性,它所启动的模块通常由其配置文件决定。

例如一个软件在启动时,它需要启动A、B两个模块,而A、B这两个模块在启动时,又分别需要A1、A2和B1、B2模块的支持,为了准确描述这种关系,此时使用XML文件最为合适不过。

中国

XML语法详解

(1)XML语法

一个XML文件分为如下几部分内容:

文档声明:

xmlversion="1.0"encoding="UTF-8"standalone="no"?

>

元素(标签):

属性

注释:

CDATA区、特殊字符

处理指令(processinginstruction)

(2)XML语法----文档声明

在编写XML文档时,需要先使用文档声明,声明XML文档的类型。

最简单的声明语法:

xmlversion="1.0"?

>

注:

没有文档声明的xml文档为:

格式不良好的文档。

用encoding属性说明文档的字符编码:

xmlversion="1.0"encoding="UTF-8"?

>

注:

如果不注意就会出些中文乱码问题,当用记事本编辑xml文档时如果该文档的声明时encoding的编码不是gb2312那么就不能直接保存(Ctrl+s)那么就要使用另存为,在另存为时要选择编码类型与encoding属性的编码一致。

用standalone属性说明文档是否独立:

xmlversion="1.0"encoding="UTF-8"standalone="yes"?

>

(3)XML语法----元素/标签(element)

XML元素指XML文件中出现的标签,一个标签分为开始标签和结束标签,一个标签有如下几种书写形式,例如:

包含标签体:

XML语法元素

不含标签体的:

,简写为:

一个标签中也可以嵌套若干子标签。

但所有标签必须合理的嵌套,绝对不允许交叉嵌套,例如:

welcometo

格式良好的XML文档必须有且仅有一个根标签,其它标签都是这个根标签的子孙标签。

对于XML标签中出现的所有空格和换行,XML解析程序会当作标签内容进行处理。

由于在XML中,空格和换行都作为原始内容被处理,所以,在编写XML文件时,使用换行和缩进等方式来让原文件中的内容清晰可读的“良好”书写习惯可能要被迫改变。

(4)XML语法----属性

一个标签可以有多个属性,每个属性都有它自己的名称和取值,例如:

属性值一定要用双引号(”)或单引号(’)引起来

定义属性必须遵循与标签相同的命名规范

多学一招:

在XML技术中,标签属性所代表的信息,也可以被改成子元素的形式来描述,例如:

text

(5)XML语法----注释

XML文件中的注释采用:

—注释—>”格式。

注意:

XML声明之前不能有注释,注释不能嵌套。

(6)XML语法----CDATA区、特殊字符

在编写XML文件时,有些内容可能不想让解析引擎解析执行,而是当作原始内容处理。

遇到此种情况,可以把这些内容放在CDATA区里,对于CDATA区域内的内容,XML解析程序不会处理,而是直接原封不动的输出。

语法:

[CDATA[内容]]>

[CDATA[


]]>

对于一些单个字符,若想显示其原始样式,也可以使用转义的形式予以处理。

特殊字符

替代符号

&

&

<

<

>

>

"

'

(7)XML语法----处理指令

处理指令,简称PI(processinginstruction)。

处理指令用来指挥解析引擎如何解析XML文档内容。

例如,在XML文档中可以使用xml-stylesheet指令,通知XML解析引擎,应用css文件显示XML文档内容。

xml-stylesheettype="text/css"href="css文件.css"?

>

处理指令必须以“<?

”作为开头,以“?

>”作为结尾,XML声明语句就是最常见的一种处理指令。

XMLDTD约束和DTD校验

(1)XML约束概述

什么是XML约束

在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束。

为什么需要XML约束

常用的约束技术

XMLDTD、XMLSchema

(2)DTD约束快速入门

DTD(DocumentTypeDefinition),全称为文档类型定义。

文件清单:

book.dtd

ELEMENT书架(书+)>

ELEMENT书(书名,作者,售价)>

ELEMENT书名(#PCDATA)>

ELEMENT作者(#PCDATA)>

ELEMENT售价(#PCDATA)>

文件清单:

book.xml

xmlversion="1.0"encoding="UTF-8"?

>

DOCTYPE书架SYSTEM"book.dtd">

<书架>

<书>

<书名>Java就业培训教程

<作者>张孝祥

<售价>39.00元

<书>

<书名>JavaScript网页开发

<作者>张孝祥

<售价>28.00元

编程校验XML文档正确性

IE5以上浏览器内置了XML解析工具:

Microsoft.XMLDOM,开发人员可以编写javascript代码,利用这个解析工具装载xml文件,并对xml文件进行dtd验证。

创建XML文档解析器对象

varxmldoc=newActiveXObject(“Microsoft.XMLDOM”);

开启xml校验

xmldoc.validateOnParse=“true”;

装载xml文档

xmldoc.load(“book.xml”);

获取错误信息

xmldoc.parseError.reason;

xmldoc.parseError.line

(3)编写DTD约束的两种方式

DTD约束即可以作为一个单独的文件编写,也可以在XML文件内编写。

引用DTD约束

XML文件使用DOCTYPE声明语句来指明它所遵循的DTD文件,DOCTYPE声明语句有两种形式:

当引用的文件在本地时,采用如下方式:

DOCTYPE文档根结点SYSTEM“DTD文件的URL”>

例如:

DOCTYPE书架SYSTEM“book.dtd”>。

在xml文件中手写一下。

当引用的文件是一个公共的文件时,采用如下方式:

DOCTYPE文档根结点PUBLIC“DTD名称”“DTD文件的URL”>

例如:

DOCTYPE文档根结点PUBLIC“-//SunMicrosystems.inc.//DTDWebApplication2.3//en”“

(4)DTD约束语法细节

元素定义

在DTD文档中使用ELEMENT声明一个XML元素,语法格式如下所示

ELEMENT元素名称元素类型>

元素类型可以是元素内容、或类型

如为元素内容:

则需要使用()括起来,如

ELEMENT书架(书名,作者,售价)>

ELEMENT书名(#PCDATA)>

如为元素类型,则直接书写,DTD规范定义了如下几种类型:

EMPTY:

用于定义空元素,例如


ANY:

表示元素内容为任意类型。

元素内容中可以使用如下方式,描述内容的组成关系

用逗号分隔,表示内容的出现顺序必须与声明时一致。

ELEMENTMYFILE(TITLE,AUTHOR,EMAIL)>

用|分隔,表示任选其一,即多个只能出现一个

ELEMENTMYFILE(TITLE|AUTHOR|EMAIL)>

在元素内容中也可以使用+、*、?

等符号表示元素出现的次数:

+:

一次或多次(书+)

?

0次或一次(书?

*:

0次或多次(书*)

(书)表示必须要出现一次。

也可使用圆括号()批量设置,例

ELEMENTMYFILE((TITLE*,AUTHOR?

EMAIL)*|COMMENT)>

属性定义

XML文档中的标签属性需通过ATTLIST为其设置属性

语法格式:

ATTLIST元素名

属性名1属性值类型设置说明

属性名2属性值类型设置说明

....

>

属性声明举例:

ATTLIST商品

类别CDATA#REQUIRED

颜色CDATA#IMPLIED

>

对应XML文件:

<商品类别="服装"颜色="黄色">...

<商品类别="服装">...

属性设置说明:

#REQUIRED:

必须设置该属性

#IMPLIED:

可以设置也可以不设置

#FIXED:

说明方式属性的取值固定为一个值,在XML文件中不能为该属性设置其他值。

但需要为该属性提供这个值。

址接使用默认值:

在XML中可以设置该值也可以不设置该属性值。

若没设置则使用默认值。

举例:

ATTLIST页面作者

姓名CDATA#IMPLIED

年龄CDATA#IMPLIED

联系信息CDATA#REQUIRED

网站职务CDATA#FIXED"页面作者"

个人爱好CDATA"上网"

>

常用属性值类型

CDATA:

表示属性值为普通文本字符串。

ENUMERATED

ID

ENTITY(实体)

属性值类型ENUMERATED

属性的类型可以是一组取值的列表,在XML文件中设置的属性值只能是这个列表中的某个值(枚举)

xmlversion="1.0"encoding="gb2312"standalone="yes"?

>

DOCTYPE购物篮[

ELEMENT肉EMPTY>

ATTLIST肉品种(鸡肉|牛肉|猪肉|鱼肉)"鸡肉">

]>

<购物篮>

<肉品种="鱼肉"/>

<肉品种="牛肉"/>

<肉/>

表示属性的设置值为一个唯一值。

ID属性的值只能由字母,下划线开始,不以出现空白字符。

xmlversion="1.0"encoding="gb2312"?

>

DOCTYPE联系人列表[

ELEMENT联系人列表ANY>

ELEMENT联系人(姓名,EMAIL)>

ELEMENT姓名(#PCDATA)>

ELEMENTEMAIL(#PCDATA)>

ATTLIST联系人编号ID#REQUIRED>

]>

<联系人列表>

<联系人编号="a1">

<姓名>张三

zhangsan@

<联系人编号="a2">

<姓名>李四

lisi@

实体定义

实体用于为一段内容创建一个别名,以后在XML文档中就可以使用别名引用这段内容了。

在DTD定义中,一条

ENTITY...>语句用于定义一个实体。

实体可分为两种类型:

引用实体和参数实体。

实体定义引用实体

引用实体主要在XML文档中被应用

语法格式:

ENTITY实体名称“实体内容”>:

直接转变成实体内容

引用方式:

&实体名称

举例:

ENTITYcopyright"Iamaprogrammer">

.....

©right;

实体定义-->参数实体

参数实体被DTD文件自身使用

语法格式:

ENTITY%实体名称“实体内容”>

引用方式:

%实体名称;

举例1:

ENTITY%TAG_NAMES"姓名|EMAIL|电话|地址">

ELEMENT个人信息(%TAG_NAMES;|生日)>

ELEMENT客户信息(%TAG_NAMES;|公司名)>

举例2:

ENTITY%common.attributes”idID#IMPLIEDaccountCDATA#REQUIRED

>

ATTLISTpurchaseOrder%common.attributes;>

ATTLISTitem%common.attributes;>

(5)DTD举例

xmlversion="1.0"?

>

DOCTYPECATALOG[

ENTITYAUTHOR"JohnDoe">

ENTITYCOMPANY"JDPowerTools,Inc.">

ENTITYEMAIL"jd@jd-">

ELEMENTCATALOG(PRODUCT+)>

ELEMENTPRODUCT

(SPECIFICATIONS+,OPTIONS?

PRICE+,NOTES?

)>

ATTLISTPRODUCT

NAMECDATA#IMPLIED

CATEGORY(HandTool|Table|Shop-Professional)"HandTool"

PARTNUMCDATA#IMPLIED

PLANT(Pittsburgh|Milwaukee|Chicago)"Chicago"

INVENTORY(InStock|Backordered|Discontinued)"InStock">

ELEMENTSPECIFICATIONS(#PCDATA)>

ATTLISTSPECIFICATIONS

WEIGHTCDATA#IMPLIED

POWERCDATA#IMPLIED>

ELEMENTOPTIONS(#PCDATA)>

ATTLISTOPTIONS

FINISH(Metal|Polished|Matte)"Matte"

ADAPTER(Included|Optional|NotApplicable)"Included"

CASE(HardShell|Soft|NotApplicable)"HardShell">

ELEMENTPRICE(#PCDATA)>

ATTLISTPRICE

MSRPCDATA#IMPLIED

WHOLESALECDATA#IMPLIED

STREETCDATA#IMPLIED

SHIPPINGCDATA#IMPLIED>

ELEMENTNOTES(#PCDATA)>

]>

A

AA

AAA

AAAA

xml解析概述和DOM&SAX解析原理

(1)xml编程(CRUD)

XML编程(CRUD,createreadupdatedelete)

XML解析技术概述

XML解析方式分为两种:

dom和sax

dom:

(DocumentObjectModel,即文档对象模型)是W3C组织推荐的解析xml的一种方式。

sax:

(SimpleAPIforSML)不是官方标准,但它是XML社区事实上的标准,几乎所有的XML解析器都支持它。

dom和sax解析方法的区别:

dom解析的优点是对文档crud比较方便,缺点是占用内存比较大

sax解析的优点是占用内存少,解析速度快,缺点是只适合做文档的读取,不适合做文档的crud。

调整JVM使用内存大小

JVM默认的内存是64M

在起动JVM时加上-Xmx90M就可以了。

-Xmx90M表示将JVM使用内存调整为90M。

XML解析开发包

Jaxp(sun)、Jdom、dom4j

JAXP

JAXP开发包是J2SE的一部分,它由java.xml、org.w3c.dom、org.xml.sax包及其子包组成

在javax.xml.parsers包中,定义了几个工厂类,程序员调用这些工厂类,可以得到xml文档的DOM或SAX的解析器,从而实现对xml文档的解析。

使用JAXP进行DOM解析

javax.xml.parsers包中的DocumentBuilderFactory用于创建DOM模式的解析器对象,DocumentBuilderFactory是一个抽象工厂类,它不能直接实例化,但该类提供了一个newInstance方法,这个方法会根据本地平台默认安装的解析器,自动创建一个工厂的对象并返回。

DOM方式解析XML文档

DOM解析编程

遍历所有节点、查找某一个节点、删除结点、更新结点、添加节点

使用DOM解析举例(查找):

packagecn.itcast.xml;

importjavax.xml.parsers.DocumentBuilder;

importjavax.xml.parsers.DocumentBuilderFactory;

importorg.junit.Test;

importorg.w3c.dom.Document;

importorg.w3c.dom.Element;

importorg.w3c.dom.Node;

importorg.w3c.dom.NodeList;

//使用dom方式对xml文档进行crud

publicclassDemo3{

@Test

publicvoidread()throwsException{

DocumentBuilderFactoryfactory=DocumentBuilderFactory.newInstance();

DocumentBuilderbuilder=factory.newDocumentBuilder();

Documentdocument=builder.parse("src/book.xml");

NodeListlist=document.getElementsByTagName("书名");

Nodenode=list.item

(1);

Stringcontent=node.getTextContent();

System.out.println(content);

}

/**

*读取book.xml文档中所有标签

*/

@Test

publicvoidread2()throwsException{

DocumentBuilderFactoryfactory=DocumentBuilderFactory.newInstance();

DocumentBuilderbuilder=factory.newDocumentBuilder();

Documentdocument=builder.parse("src/book.xml");

//得到根结点

Nodenode=document.getElementsByTagName("书架").item(0);

list(node);

}

privatevoidlist(Nodenode){

//System.out.println(node.getNodeName());

if(nodeinstanceofElement){//判断是否是标签

System.out.println(node.getNodeName());

}

NodeListlist=node.getChildNodes();

for(inti=0;i

Nodechild=list.item(i);

list(child);

}

}

/**

*读取book.xml文档中一个标签属性的值:

<书名name="xxxx">Java就业培训教程

*/

@Test

publicvoidread3()throwsException{

DocumentBuilderFactoryfactory=DocumentBuilderFactory.newInstance();

DocumentBuilderbuilder=factory.newDocumentBuilder();

Documentdocument=builder.parse("src/book.xml");

//得到根结点

Elementbookname=(Element)document.getElementsByTagName("书名").item(0);

Stringvalue=bookname.getAttribute("name");

System.out.println(value);

}

}

book.xml文档

xmlversion="1.0"encoding="UTF-8"?

>

DOCTYPE书架SYSTEM"book.dtd">

<书架>

<书>

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2