xml学习笔记
XML的学习目标: 能用XML描述现实中的有层次关系的数据 能使用程序读取到XML中表示的数据(解析Parser) 一、XML是什么?作用是什么? 1、XML是指可扩展标记语言(eXtensibleMarkupLanguage),用户自定义的标签.相对于HTML来讲的。 2、XML被设计的宗旨是表示数据。HTML是用来显示数据的。目前经常使用的XML版本是1.0 3、XML除了表示数据外。在实际的企业开发中,主要用XML作为程序的配置文件。 *******二、XML的基本语法 1、文档声明: 作用:用于标识该文档是一个XML文档。 注意事项:声明必须出现在文档的第一行(之前连空行都不能有,也不能有任何的注释) 最简单的XML声明:<?xmlversion="1.0"?>声明时候<?xml之间不能有空格 声明中的encoding属性:说明解析当前XML文档时所使用的编码。默认是UTF-8 声明中的standalone属性:说明XML文档是否是独立的。(了解) 2、元素 结束标签不能省略 一个XML文档必须且只能有一个根标签 XML文档中不会忽略回车和换行及空格 标签的命名规范:元素(标签)的名称可以包含字母、数字、减号、下划线和英文句点。严格区分大小写。 1、名字可以包含字母、数字和其它字符 2、名字不能以数字或标点符号开头 3、名字不能以xml或XML(Xml等)此类开头 4、名字不能包含空格 3、元素的属性 元素的属性取值一定要用引号引起来(单引号或双引号) 4、注释 与HTML中的注释完全一致:<!--这是注释--> 注释不能嵌套 5、CDATA区 CDATA(CharacterData)的缩写.实际开发过程中,一些数据可能不想让解析引擎处理. 作用:CDATA区中的东东都是文本。 语法: <![CDATA[ 文本内容 ]]> 6、特殊字符 &&ersand <<(lessthan) >>:(greatthan) ""quotation ''apostrophe 7、处理指令(PI:ProcessingInstruction) 处理指令,简称PI(ProcessingInstruction)。 作用:用来指挥软件如何解析XML文档。 语法:必须以“<?”作为开头,以“?>”作为结尾。 <?xml-stylesheettype="text/css"href="s.css"?> 三、XML的约束 1、格式良好的XML文档:符合XML语法的。 2、有效的XML文档:遵循约束规范的。 格式良好的不一定是有效的,但有效的必定格式良好。 四、DTD的基本语法(看懂即可) 1、DTD:DocumentTypeDefinition 2、作用:约束XML的书写规范。 3、DTD文件保存到磁盘时,必须使用UTF-8编码 4、如何引入外部的DTD文档来约束当前的XML文档 DTD文件在本地:<!DOCTYPE根元素名称SYSTEM"DTD文件的路径"> DTD文件在网络上:<!DOCTYPE根元素名称PUBLIC"DTD名称""DTD的路径URL"> <?xmlversion="1.0"encoding="UTF-8"standalone="yes"?> <!DOCTYPE书架[ <!ELEMENT书架(书+)> <!ELEMENT书(书名,作者,售价)> <!ELEMENT书名(#PCDATA)> <!ELEMENT作者(#PCDATA)> <!ELEMENT售价(#PCDATA)> ]> <书架> <书> <书名>Java就业培训教程</书名> <作者>张孝祥</作者> <售价>39.00元</售价> </书> ... </书架> 5、DTD的语法细节 5.1定义元素 语法:<!ELEMENT元素名称使用规则> 使用规则: (#PCDATA):指示元素的主体内容只能是普通的文本.(ParsedCharacterData) EMPTY:指示元素的不能有主体内容。 ANY:用于指示元素的主体内容为任意类型 (子元素):指示元素中包含的子元素 如果子元素用逗号分开,说明必须按照声明顺序去编写XML文档 如果子元素用“|”分开,说明任选其一。 用+、*、?来表示元素出现的次数 +:一次或多次(书+)regex ?:0次或一次(书?) *:0次或多次(书*) 5.2定义元素的属性(attribute) 语法:<!ATTLIST哪个元素的属性 属性名1属性值类型设置说明 属性名2属性值类型设置说明> 属性值类型: CDATA:说明该属性的取值为一个普通文本 ENUMERATED(DTD没有此关键字): 语法:<!ATTLIST元素名称(值1|值2)"值1"> ID:属性的取值不能重复 设置说明: #REQUIRED:表示该属性必须出现 #IMPLIED:属性可有可无 #FIXED:表示属性的取值为一个固定值语法:#FIXED"固定值" 直接值:表示属性的取值为该默认值 5.2定义实体 关键字ENTITY 实体的定义分为引用实体和参数实体 引用实体: 作用:在DTD中定义,在XML中使用 语法:<!ENTITY实体名称"实体内容"> 在XML中使用:&实体名称; 参数实体: 作用:在DTD中定义,在DTD中使用 语法:<!ENTITY%实体名称"实体内容"> 在DTD中使用:%实体名称; ?xmlversion="1.0"encoding="GB2312"?> <!DOCTYPE联系人列表[ <!ELEMENT联系人列表ANY> <!ELEMENT联系人(姓名,EMAIL)> <!ELEMENT姓名(#PCDATA)> <!ELEMENTEMAIL(#PCDATA)> <!ATTLIST联系人编号ID#REQUIRED> ]> <联系人列表> <联系人编号="a1"> <姓名>张三</姓名> <EMAIL>zhang@it315.org</EMAIL> </联系人> <联系人编号="b1"> <姓名>李四</姓名> <EMAIL>li@it315.org</EMAIL> </联系人> </联系人列表> 五、XML解析方式概述 1、常用XML的解析方式:DOM和SAX DOM:DocumentObjectModel是W3C推荐使用的解析方式 SAX:SimpleAPIforXML。非官方标准。 2、常用解析开发包: JAXP:SUN推出的实现,能进行DOM和SAX方式解析 Dom4J JDom等 六、JAXP进行DOM解析 JAXP的API都在JavaSE中。 org.w3c.dom:提供DOM方式解析XML的标准接口 DocumentBuilderFactoryfactory=DocumentBuilderFactory.newInstance(); DocumentBuilderbuilder=factory.newDocumentBuilder(); Documentdocument=builder.parse("src/book.xml"); ElementcreateElement=document.createElement("售价"); createElement.setTextContent("59.00"); NodeListnodeList=document.getElementsByTagName("书"); Elementelement=(Element)nodeList.item(0); element.appendChild(createElement); TransformerFactorytransformerFactory=TransformerFactory.newInstance(); Transformertransformer=transformerFactory.newTransformer(); transformer.transform(newDOMSource(document),newStreamResult("src/book.xml")); org.xml.sax:提供SAX方式解析XML的标准接口 详细代码见第一天day01文件夹 javax.xml:提供了解析XML文档的类 Transformer类用于把代表XML文件的Document对象转换为某种格式后进行输出,例如把xml文件应用样式表后转成一个html文档。利用这个对象,当然也可以把Document对象又重新写入到一个XML文件中 七、JAXP进行DOM解析的案例
八、JAXP进行SAX解析 ******九.Pull解析器 1.先通过XmlPullParserFactory获得工厂对象,然后通过factory.newPullParser()获得XmlPullParser解析对象 2.parser.setInput(newFileInputStream("src/book.xml"),"UTF-8");传入解析的文件和编码 3.inteventType=parser.getEventType();获得解析的标签类型 4.每次都要手动移动指针到下一个位置eventType=parser.next(); 解析方式的优缺点: 十、Schema约束(看懂即可) 1、Schema约束文档本身就是一个XML文档,扩展名为xsd 2、重点:根据Schema写出XML文档 难点:XML文档的根元素怎么写? a、首先看Schema文档,找到根元素 <?xmlversion="1.0"encoding="UTF-8"?> <书架></书架> b、思考:书架来自于哪个名称空间?看Schema文档,targetNamespace就是名称空间。 用xmlns关键字(xmlns名称空间声明)来声明我的元素来自哪个名称空间(xmlns:xmlnamespace) <?xmlversion="1.0"encoding="UTF-8"?> <itcast:书架xmlns:itcast="http://www.itcast.cn"></itcast:书架> c、思考:名称空间与哪个xsd文件对应呢?使用schemaLocation关键字来关联名称空间和xsd的对应关系 <?xmlversion="1.0"encoding="UTF-8"?> <itcast:书架xmlns:itcast="http://www.itcast.cn" schemaLocation="http://www.itcast.cnbook.xsd"></itcast:书架> d、schemaLocation来自哪里?来自一个标准的名称空间(http://www.w3.org/2001/XMLSchema-instance) <?xmlversion="1.0"encoding="UTF-8"?> <itcast:书架xmlns:itcast="http://www.itcast.cn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.itcast.cnbook.xsd"></itcast:书架> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |