1、xml笔记XML语言XML语言和作用(1)什么是XML什么时XML,为什么学习XML?Extensible Markup Language,翻译过来为可扩展标记语言。XML技术是w3c组织发布的,目前推荐遵循是w3c组织于2000发布的xml1.0规范。XML技术用于解决什么问题?XML语言出现的根本目标在于描述生活中数据于数据之间的关系。在XML语言中,它允许用户定义标签。一个标签用于描述一段数据;一个标签可分为开始标签和结束标签,在开始标签和结束标签之间,又可以使用其它标签描述其它数据,以此来实现数据关系的描述。例如: (2)XML常见应用XML技术除用于保存有关系的数据之外,它还经常用作
2、软件配置文件,以描述程序模块之间的关系。在一个软件系统中,为提高系统的灵活性,它所启动的模块通常由其配置文件决定。例如一个软件在启动时,它需要启动A、B两个模块,而A、B这两个模块在启动时,又分别需要A1、A2和B1、B2模块的支持,为了准确描述这种关系,此时使用XML文件最为合适不过。 中国 XML语法详解(1)XML语法一个XML文件分为如下几部分内容:文档声明:元素(标签):属性注释:CDATA区、特殊字符处理指令(processing instruction)(2)XML语法-文档声明在编写XML文档时,需要先使用文档声明,声明XML文档的类型。最简单的声明语法:注:没有文档声明的xm
3、l文档为:格式不良好的文档。用encoding属性说明文档的字符编码:注:如果不注意就会出些中文乱码问题,当用记事本编辑xml文档时如果该文档的声明时encoding的编码不是gb2312那么就不能直接保存(Ctrl+s)那么就要使用另存为,在另存为时要选择编码类型与encoding属性的编码一致。用standalone属性说明文档是否独立:(3)XML语法-元素/标签(element) XML元素指XML文件中出现的标签,一个标签分为开始标签和结束标签,一个标签有如下几种书写形式,例如:包含标签体:XML语法元素不含标签体的:,简写为:一个标签中也可以嵌套若干子标签。但所有标签必须合理的嵌套
4、,绝对不允许交叉嵌套,例如:welcome to 格式良好的XML文档必须有且仅有一个根标签,其它标签都是这个根标签的子孙标签。对于XML标签中出现的所有空格和换行,XML解析程序会当作标签内容进行处理。由于在XML中,空格和换行都作为原始内容被处理,所以,在编写XML文件时,使用换行和缩进等方式来让原文件中的内容清晰可读的“良好”书写习惯可能要被迫改变。(4)XML语法-属性 一个标签可以有多个属性,每个属性都有它自己的名称和取值,例如:属性值一定要用双引号(”)或单引号()引起来定义属性必须遵循与标签相同的命名规范多学一招:在XML技术中,标签属性所代表的信息,也可以被改成子元素的形式来描
5、述,例如: text(5)XML语法-注释 XML文件中的注释采用:“”格式。注意:XML声明之前不能有注释,注释不能嵌套。(6)XML语法-CDATA区 、特殊字符在编写XML文件时,有些内容可能不想让解析引擎解析执行,而是当作原始内容处理。遇到此种情况,可以把这些内容放在CDATA区里,对于CDATA区域内的内容,XML解析程序不会处理,而是直接原封不动的输出。语法:!CDATA 对于一些单个字符,若想显示其原始样式,也可以使用转义的形式予以处理。特殊字符替代符号&>“"'(7)XML语法-处理指令 处理指令,简称PI(processing instruc
6、tion)。处理指令用来指挥解析引擎如何解析XML文档内容。例如,在XML文档中可以使用xml-stylesheet指令,通知XML解析引擎,应用css文件显示XML文档内容。处理指令必须以“”作为结尾,XML声明语句就是最常见的一种处理指令。XMLDTD约束和DTD校验 (1)XML约束概述 什么是XML约束在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束。为什么需要XML约束常用的约束技术XML DTD、XML Schema(2)DTD约束快速入门DTD(Document Type Definition),全称为文档类型定义。文件清单:book.dtd文件
7、清单:book.xml Java就业培训教程 张孝祥 39.00元 JavaScript网页开发 张孝祥 28.00元 编程校验XML文档正确性IE5以上浏览器内置了XML解析工具:Microsoft.XMLDOM,开发人员可以编写javascript代码,利用这个解析工具装载xml文件,并对xml文件进行dtd验证。创建XML文档解析器对象var xmldoc = new ActiveXObject(“Microsoft.XMLDOM”);开启xml校验xmldoc.validateOnParse = “true”;装载xml文档xmldoc.load(“book.xml”);获取错误信息x
8、mldoc.parseError.reason;xmldoc.parseError.line(3)编写DTD约束的两种方式DTD约束即可以作为一个单独的文件编写,也可以在XML文件内编写。引用DTD约束XML文件使用DOCTYPE声明语句来指明它所遵循的DTD文件,DOCTYPE声明语句有两种形式:当引用的文件在本地时,采用如下方式:例如:。在xml文件中手写一下。当引用的文件是一个公共的文件时,采用如下方式:例如:!DOCTYPE 文档根结点 PUBLIC “-/Sun Microsystems.inc./DTD Web Application2.3/en” “(4) DTD约束语法细节元素
9、定义在DTD文档中使用ELEMENT声明一个XML元素,语法格式如下所示元素类型可以是元素内容、或类型如为元素内容:则需要使用()括起来,如如为元素类型,则直接书写,DTD规范定义了如下几种类型:EMPTY:用于定义空元素,例如ANY:表示元素内容为任意类型。元素内容中可以使用如下方式,描述内容的组成关系用逗号分隔,表示内容的出现顺序必须与声明时一致。用|分隔,表示任选其一,即多个只能出现一个在元素内容中也可以使用+、*、?等符号表示元素出现的次数:+:一次或多次(书+)?:0次或一次(书?)*:0次或多次(书*)(书)表示必须要出现一次。也可使用圆括号()批量设置,例属性定义XML文档中的标
10、签属性需通过ATTLIST为其设置属性语法格式:属性声明举例:对应XML文件: .属性设置说明:#REQUIRED:必须设置该属性#IMPLIED:可以设置也可以不设置#FIXED:说明方式属性的取值固定为一个值,在XML文件中不能为该属性设置其他值。但需要为该属性提供这个值。址接使用默认值:在XML中可以设置该值也可以不设置该属性值。若没设置则使用默认值。举例:常用属性值类型CDATA:表示属性值为普通文本字符串。ENUMERATEDIDENTITY(实体)属性值类型ENUMERATED属性的类型可以是一组取值的列表,在XML文件中设置的属性值只能是这个列表中的某个值(枚举)!DOCTYPE
11、 购物篮 表示属性的设置值为一个唯一值。ID属性的值只能由字母,下划线开始,不以出现空白字符。!DOCTYPE 联系人列表 张三 zhangsan 李四 lisi 实体定义实体用于为一段内容创建一个别名,以后在XML文档中就可以使用别名引用 这段内容了。在DTD定义中,一条语句用于定义一个实体。实体可分为两种类型:引用 实体和参数实体。实体定义引用实体引用实体主要在XML文档中被应用语法格式:直接转变成实体内容引用方式:&实体名称举例:.©right;实体定义-参数实体参数实体被DTD文件自身使用语法格式:引用方式:%实体名称;举例1:举例2:(5) DTD举例!DOCTYPE CAT
12、ALOG A AA AAA AAAA xml解析概述和DOM&SAX解析原理(1)xml编程(CRUD)XML编程(CRUD,create read update delete)XML解析技术概述XML解析方式分为两种:dom和sax dom:(Document Object Model,即文档对象模型)是W3C组织推荐的解析xml的一种方式。 sax:(Simple API for SML)不是官方标准,但它是XML社区事实上的标准,几乎所有的XML解析器都支持它。dom和sax解析方法的区别: dom解析的优点是对文档crud比较方便,缺点是占用内存比较大 sax解析的优点是占用内存少,解
13、析速度快,缺点是只适合做文档的读取,不适合做文档的crud。调整JVM使用内存大小JVM默认的内存是64M在起动JVM时加上-Xmx90M就可以了。-Xmx90M表示将JVM使用内存调整为90M。XML解析开发包 Jaxp(sun)、Jdom、dom4jJAXPJAXP开发包是J2SE的一部分,它由java.xml、org.w3c.dom、org.xml.sax包及其子包组成在javax.xml.parsers包中,定义了几个工厂类,程序员调用这些工厂类,可以得到xml文档的DOM或SAX的解析器,从而实现对xml文档的解析。使用JAXP进行DOM解析javax.xml.parsers包中的D
14、ocumentBuilderFactory用于创建DOM模式的解析器对象,DocumentBuilderFactory是一个抽象工厂类,它不能直接实例化,但该类提供了一个newInstance方法,这个方法会根据本地平台默认安装的解析器,自动创建一个工厂的对象并返回。DOM方式解析XML文档DOM解析编程遍历所有节点、查找某一个节点、删除结点、更新结点、添加节点使用DOM解析举例(查找):package cn.itcast.xml;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderF
15、actory;import org.junit.Test;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.Node;import org.w3c.dom.NodeList;/使用dom方式对xml文档进行crudpublic class Demo3 Test public void read() throws Exception DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuild
16、er builder = factory.newDocumentBuilder(); Document document = builder.parse(src/book.xml); NodeList list = document.getElementsByTagName(书名); Node node = list.item(1); String content = node.getTextContent(); System.out.println(content); /* * 读取book.xml文档中所有标签 */ Test public void read2() throws Exce
17、ption DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse(src/book.xml); /得到根结点 Node node = document.getElementsByTagName(书架).item(0); list(node); private void list(Node node) /System.out.pri
18、ntln(node.getNodeName(); if(node instanceof Element)/判断是否是标签 System.out.println(node.getNodeName(); NodeList list = node.getChildNodes(); for(int i=0;ilist.getLength();i+) Node child = list.item(i); list(child); /* * 读取book.xml文档中一个标签属性的值:Java就业培训教程 */ Test public void read3() throws Exception Docum
19、entBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse(src/book.xml); /得到根结点 Element bookname = (Element) document.getElementsByTagName(书名).item(0); String value = bookname.getAttribute(name); System.out.println(value); book.xml文档
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2