一个XML文件分为如下及部分内容: 文档声明 元素 属性 注释 CDATA区,特殊字符 处理指令(processing instruction) 在编写xml文档,需要先使用文档声明,声明XML文档的类型 最简单的声明语法: <?xml version="1.0" ?> 用encoding属性说明文档的字符编码: <?xml version="1.0"encoding="GB2312" ?> 用standalone属性说明文档是否独立: <?xml version="1.0"encoding="GB2312" standalone="yes" ?> XML元素指XML文件中出现的标签,一个标签分为开始标签和结束标签,一个标签有如下几种书写形式例如: 包含标签体:<a>www.itcast.cn</a> 不包含标签体:<a></a>,简写为:<a/> 一个标签中也可以嵌套若干子标签。但所有标签必须合理的嵌套,绝对不允许交叉嵌套,例如:<a>welcome to <b>www.it315.org</a></b> 格式良好的XML文档必须有且仅有一个根标签,其他标签都是这个根标签的子孙标签。 对于XML标签中出现的所有空格和换行,XML解析程序都会当作标签内容进行处理。例如:下面两段内容的意义是不一样的(由于在xml中,空格和换行都作为原始内容被处理,所以在编写xml文件时,使用换行和缩进等方式来让原文件中的内容清晰可读的“良好”书写习惯可能要被迫改变) 一个xml元素可以包含字母,数字以及其他一些可见字符,但必须遵守下面的一些规范: 区分大小写,例如,<P>和<p>是两个不同的标记 不能以数字或“_”(下划线)开头 不能以xml(或XML,或Xml等)开头 不能包含空格 名称中间不能包含冒号(:) 一个标签可以有多个属性,每个属性都有它自己的名称和取值,例如: <input name="text"> 属性值一定要用双引号(“)或单引号(‘) Xml文件的注释采用:<!--注释--> 格式 注意:xml声明之前不能有注释。注释不能嵌套,例如:<!==大段注释。。。。《!--局部注释--->....--> 在编写XML文件时,有些内容可能不想让解析引擎解析执行,而是当作原始内容处理。 遇到此种情况,可以把这些内容放在CDATA区里,对于CDATA区域的内容,XML解析程序不会处理,而是直接原封不动的输出。 语法: <![CDATA[内容]]> <![CDATA[> <itcast> <br/> </itcast> ]]> 转义字符 & & < < > > " " ' ' 处理指令,简称PI(processing instruction).处理指令用来指挥解析引擎如何解析XML文档内容。例如,在XML文档中可以使用xml-stylesheet指令,通知XMLj解析引擎,应用css文件显示xml文档内容。<?xml-stylesheettype="text/css" herf="1.css " ?> 处理指令必须以"<?"作为开头,以"?>"作为结尾,xml声明语句就是最常见的一种处理指令。 在XML技术里,可以编写一个文档来约束一个XMLwe文档的书写规范,这称之为XML约束。 XML的约束技术 XML DTD XML Schema XML解析 dom 对内存消耗比较大,缺点:如果文档比较大的话,容易内存溢出,对文档增删改查比较容易 sax 从上往下读,读取一行处理一行,对内存没有压力,缺点是不适合对文档做增删改查,只适合读取。 Dom和sax解析方式的区别 Dom解析的优点是对文档增删改查crud比较方便,缺点是占用内存比较大 sax解析的优点是占用内存小,解析速度快,缺点是只适合做文档的读取,不适合做文档的增删改查。 调整jvm大小 默认大小是64M 可以修改 -Xmx80m Xml解析开发包 Jaxp(sun) 、Jdom 、dom4j 使用Jaxp进行DOM解析 javax.xml.parsers包中的DoucumentBuilderFactpry用于创建DOM模式的解析器对象,DocumentBuilderFactory是一个抽象工厂类,它不能直接实例化,但该类提供了一个newInstance方法,这个方法会根据本地平台默认安装的解析器吗,自动创建一个工厂的对象并返回。 javax.xml.transform包中的Transformer类用于把代表XML文文件的Document对象转换成某种格式后进行输出,例如把xml文件应用样式表后转成一个html文档。利用这个对象,当然也可以把Document对象又重新写入到一个XML文件中。 Transformer类通过transform方法完成转换操作,该方法接收一个源和一个目的地。我们可以通过 javax.xml.teansfoem.dom.DOMSource类来关联要转换的document对象, 用javax.xml.transfoem.stream.StreamResult对象来表示数据的目的地。 Transformer对象通过TransformerFactory获得
|