笔记之XML约束、XML解析

XML:可扩展标记语言

作用:用来存储有关系的数据,做配置文件(可提高系统的灵活性,描述模块与模块之间的关系)

可自定义标签。一个标签包括开始标签和结束标签,

开始和结束标签之间又可以使用其他标签

 Xml:

文档声明<?Xml version="1.0" ?>(最简单文档声明),没有文档声明的XML是格式不良好的文档

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

Standalone="yes"//是否依赖其他文档

空格和换行也是XML内容。

标签属性可以跟在标签后,也可以以子元素形式。

<!--        -->注释,注释不能嵌套

CDATA区:

Xml中不需要解析的内容,可以放在CDATA区

<![CDATA[

...........

]]>

转义字符:

用来显示单个字符的原始样式,不会被解析

&(&),<(<),>(>),"("),'(&quos;)后面要跟分号

处理指令:

用来指导引擎解析XML

Xml-stylesheet可指定引擎用什么样式来显示XML

<?Xml-stylesheet type="text/css" href="1.css" ?>

XML约束:( 要能读懂约束)

DTD约束:

约束可写在一个单独的文件中,也可以直接写在XML中

约束中如果有中文,编码要指定为utf-8或unicode

引入约束<!DOCTYPE 书架 SYSTEM "book.dtd">

文件清单:book.dtd

<!ELEMENT 书架 (书+)>// 书架中可有多本书

<!ELEMENT 书 (书名,作者,售价)>//声明书的属性

<!ELEMENT 书名 (#PCDATA)>//PCDATA代表中间可写字符串

<!ELEMENT 作者 (#PCDATA)>

<!ELEMENT 售价 (#PCDATA)>

元素定义:参考PPT

<!Element 名称 类型或内容(如果是内容,要用括号)>

属性定义:

<!ATTLIST元素名

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

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

>

约束的引入:

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

<!DOCTYPE 文档根结点 SYSTEM "DTD文件的URL">

例如: <!DOCTYPE 书架 SYSTEM “book.dtd”>。在xml文件中手写一下。

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

<!DOCTYPE 文档根结点 PUBLIC "DTD名称" "DTD文件的URL">

例如:<!DOCTYPE web-app PUBLIC 

"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"

"http://java.sun.com/dtd/web-app_2_3.dtd">

Javacript校对XML:

创建xml文档解析器对象

var xmldoc = new ActiveXObject("Microsoft.XMLDOM");

开启xml校验

xmldoc.validateOnParse = "true";

装载xml文档

xmldoc.load("book.xml");

获取错误信息

xmldoc.parseError.reason;  

xmldoc.parseError.line

XML编程:

XML解析:dom和sax

Dom:一次装载整个文档,把所有节点(Node)变成对象

Node.type类型(Element,Attribute)

Crud 操作,拿到父节点

特点:

会把整个文档装载到内存中,并把文档的每一部分内容都变成一个对象,并按照文档结构建立起对象关系

CRUD操作方便

缺点:如果XML文档很大,内存占用量大,可能内存溢出。(虚拟机缺省值64M)

修改虚拟机内存: dialog----可变参数---   -Xmx500m

Sax:

读一行,解析一行。(速度快,内存消耗低)

但不能修改文档。

特点:

边解析变执行,内存消耗很少,并且解析速度很快;

缺点:

不能做文档的增删改。

XML解析开发包:

Jaxp (SUN),dom ,dom4j(dom4j最优秀)

Jaxp:(可参考JDK文档)day2----day3

是J2SE的一部分

Jaxp  dom:

DocumentBuilderFactory.newInstace()//获得解析器工厂

newDocumentBuilder()获得解析器

修改后的XML数据跟新到XML中要用transformer

TransformerFactory.newInstance().newTanstormer().tansform(new DomSource(document),new StreamResult(new File("src/book.xml")));

 Jaxp    Sax:

采用事件处理的方式解析。没解析到一个组成部分,就调用事件处理器的一个方法,并把数据传给解析器

内容事件处理器:ContentHandler

SAXParserFactory.newInstace().newSAXParser().getXMLReader();

reader.setContentHandler(new MyHandler());(处理器要实现contenHandler接口或继承defaultHandler  默认实现类)

Reader.parse("src/book.xml");

ContentHandler的API:

Characters();

startElement();

endElement();

startDocument();

endDocument();

Dom4j:

导包:如果一个不行,就导入lib里的所有包。

参考文档。

document.getRootElement().element(“书名”)//第一个子节点

document.getRootElement().elements("书名").get(2);第二个子节点

.attributeValue("name");获得属性的值

更新到XML中:

XMLWriter writer=new XMLWriter(new OutputStreamWriter(new FileOutputStream("src/book.xml"),"UTF-8"));

Writer.wirte(document);

Wirter.closd();

也可通过格式化输出器,指定码表

Xpath: (参考XPATH中文文档)

方便提取XML数据

可配合DOM4J用来取XML数据,具体参考文档案例

Xml约束:

Schema:     .xsd

Schema符合XML语法结构(也是XML文件)

支持更多数据类型,支持自定义数据类型。

不能定义实体

根节点是 schema

编写好的约束会绑定一个URI,编写XML时可以引入名称空间,来约束XML

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值