XML和FileI/O第五章预习检查XML概念及作用?如何使用CSS修饰XML文档?如何使用DOM解析XML文档?Java中如何实现文件的输入输出?本章任务使用CSS修饰XML文档使用DOM解析XML文档按照规范格式保存宠物数据到文件本章目标理解XML概念及作用使用CSS修饰XML文档使用DOM解析XML文档使用Reader读取文件内容使用Writer输出内容到文件XML(eXtensibleMarkupLanguage,可扩展标记语言)是一种简单的数据存储语言,使用一系列简单的标签描述数据使人们或程序能够理解这些标签XML简介2-1SGMLHTML基于文本的格式,允许开发人员描述结构化数据并在各种应用之间发送和交换这些数据有助于在服务器之间传输结构化数据允许通过使用自定义格式,标识、交换和处理数据库可以理解的数据是元语言XMLXMLXML标记语言的层次结构XML简介2-2?xmlversion=1.0encoding=GB2312?DetailsCONTACTRESTAURANT_NAME中华园/RESTAURANT_NAMEPhone3336767/PhoneStreet王府井大街25号/StreetCity北京/CityCountry中国/CountryZIP20056/ZIPEmailchinagarden@china.com/Email/CONTACTCONTACT.../CONTACT/DetailsXML声明-定义XML版本包含数据的XML标签XML和XHTML的区别?xmlversion=1.0encoding=UTF-8?!DOCTYPEhtmlPUBLIC-//W3C//DTDXHTML1.0Transitional//EN=:lang=enlang=enheadtitleXHTML网页示例/title/headbody这是一个XHTML网页!br/hrwidth=500align=left/XHTML标签都是标准标签,不允许自定义标签。/body/htmlXHTML标记?xmlversion=1.0encoding=UTF-8?宠物们狗狗id=1姓名YAYA/姓名健康值100/健康值亲密度0/亲密度品种酷酷的雪娜瑞/品种/狗狗狗狗id=2姓名OUOU/姓名健康值90/健康值亲密度15/亲密度品种聪明的拉布拉多犬/品种/狗狗/宠物们XML标记XHTMLXML标签标签都有固定含义不能去创造新的标签支持自定义标签,具有扩展性作用主要用来显示数据可以通过标签和属性对页面显示进行排版用来存储和交换数据无法描述页面的排版和显示形式创建XML文档XML文档总是以XML声明开始定义了XML的版本和所使用的编码等信息XML文档的主要部分是元素元素由开始标签、元素内容和结束标签组成元素内容可以包含子元素、字符数据等XML文档中的注释符号是!----?xmlversion=1.0encoding=UTF-8?至少需要一个元素XML标签区分大小写应正确使用结束标签正确嵌套标签应使用合法标签标记名称的长度应定义有效的属性应验证文档管理元素的规则格式良好和有效的XML文档被视为格式良好的XML文档的条件:该文档满足最低要求集如果文档不满足任何一个良好格式的要求,则将发生致命错误有效的XML文档是符合DocumentTypeDefinition(文档类型定义,DTD)的规则的格式良好的XML文档解析器--------------------------------------------------由解析器解析的XML文档在浏览器中查看已解析的文档?xmlversion=“1.0”?nxn/nxn带有XML文档的编辑器解析器类型非验证解析器验证解析器检查文档格式是否良好使用DTD检查文档的有效性使用DTD生成XML文档什么是DTDDTD(DocumentTypeDefinition文档类型定义)保证XML文档格式正确性DTD的结构DTD以简单文本文件的形式出现可以存储在独立的文件中,也可以嵌入XML文档引用DTD的XML文档将包含!DOCTYPE声明验证接收到的数据是否有效用于验证自己的数据定义XML文档的合法构建块使用一系列合法元素来定义文档结构演示示例:内部和外部DTD定义DTD的结构DTD的结构为:!DOCTYPEpets[!ELEMENTpets(dogs,penguins)!ELEMENTdogs(dog*)!ELEMENTpenguins(penguin+)!ELEMENTdog(name,health,love,strain?)!ATTLISTdogidCDATA#REQUIRED!ELEMENTpenguin(name,health,love,sex)!ATTLISTpenguinidCDATA#REQUIRED!ELEMENTname(#PCDATA)!ELEMENThealth(#PCDATA)!ELEMENTlove(#PCDATA)!ELEMENTstrain(#PCDATA)!ELEMENTsex(#PCDATA)]声明根元素pets直接下级元素是dogs、penguins,顺序固定,只能出现一次dogs直接下级元素是dog,*表示dog元素可以出现0到多次penguins直接下级元素是penguin,+表示penguin至少出现一次dog的直接下级元素依次是name,health,love,strain,?表示strain元素出现0次到1次dog元素有id属性,是CDATA类型,必须出现元素为#PCDATA类型XML的优势:XML的优势XML独立于计算机平台可扩展性交互性独立于编程语言独立于操作系统简单性灵活性XML的作用数据存储:数据库提供了更强有力的数据存储和分析能力XML仅仅是存储数据XML与其他数据表现形式最大的不同是它极其简单,正是这点使XML与众不同数据交换:由于各个计算机所使用的操作系统、数据库不同,因此数据之间的交换向来是件头痛的事可以使用XML来交换数据数据配置:使用XML配制文件可读性强,灵活性高使用CSS格式化XML显示效果编写CSS样式文件引入CSS文件pets{display:block;color:red;}dog,penguin{display:block;margin-left:40pt;}?xml-stylesheettype=text/csshref=pet.css?使用CSS格式化XML不能代表XML文档格式化的未来。XSL是首选的XML样式表语言,远比CSS更加完善演示示例:使用CSS格式化XML解析XML目前最常用的XML解析技术:DOMSAXSun公司提供了JAXP(JavaAPIforXML)接口来使用DOM和SAXorg.w3c.dom:W3C推荐的用于使用DOM解析XML文档的接口org.xml.sax:用于使用SAX解析XML文档的接口javax.xml.parsers:解析器工厂工具,程序员获得并配置特殊的特殊语法分析器使用DOM解析XMLDOM是DocumentObjectModel的缩写,即文档对象模型DOM把XML文映射成一个倒挂的树使用DOM解析XML文档的步骤:创建解析器工厂对象由解析器工厂对象创建解析器对象由解析器对象对指定XML文件进行解析,构建相应DOM树,创建Document对象以Document对象为起点对DOM树的节点进行增删改查操作。演示示例:使用DOM解析XMLDocument对象Document对象代表了整个XML文档所有其它的Node都以一定的顺序包含在Document对象之内它也是对XML文档进行操作的起点Document对象的主要方法有:getElementsByTagName(String):返回一个NodeList对象,它包含了所有给定标签名字的标签getDocumentElement():返回一个代表这个DOM树的根节点的Element对象,也就是代表XML文档根元素的那个对象NodeList对象指一个包含了一个或者多个节点(Node)的列表可以简单的把它看成一个Node数组可以通过方法来获得列表中元素NodeList对象常用的方法有:getLength():返回列表的长度item(int):返回指定位置的Node对象Node对象是DOM结构中最基本的对象,代表了文档树中的一个抽象节点实际使用的时候,很少会真正用到Node这个对象而是用到诸如Element、Attr、Text等Node对象的子对象Node对象的主要方法有:方法名说明getChildNodes()包含此节点的所有子节点的NodeListgetFirstChild()如果节点存在子节点,则返回第一个子节点getLastChild()如果节点存在子节点,返回最后一个子节点getNextSibling()返回在DOM树中这个节点的下一个兄弟节点getPreviousSibling()返回在DOM树中这个节点的上一个兄弟节点getNodeName()根据节点的类型返回节点的名称getNodeValue()返回节点的值getNodeType()返回节点的类型Element对象Element对象代表XML文档中的标签元素继承自Node对象,是Node最主要的子对象Element对象的方法:getAttribute(String):返回标签中给定属性名称的属性的值getElementsByTagName(String):返回具有给定标记名称的所有后代Elements的NodeList使用SAX解析XMLSAX(SimpleAPIforXML)是另一种常用的XML解析技术SAX解析器不像DOM那样建立一个完整的文档树,而是在读取文档时激活一系列事件这些事件被推给事件处理器,然后由事件处理器提供对文档内容的访问与DOM相比,SAX的优点如下:内存消耗小无需为所有节点创建对象小结什么是XML?有什么作用?解析XML文档的方式有几种?DOM解析XML文件的步骤?指导——根据DTD定义编写XML文档训练要点:XML定义使用DTD定义XML文档结构根据DTD正确编写XML文档需求说明:依据DTD文件定义编写XML文档,用于设置宠物的健康值和亲密度,以及运动后两项的变化值实现思路:创建Java项目TestXML根据需求提供的内容创建并编写外部DTD文件pet.dtd根据pet.dtd文件创建并编写XML文件pet.config?xmlversion=1.0encoding=UTF-8?!DOCTYPEpetsSYSTEMpet.dtdpetdoghealth100/healthlove0/lovedecHealth18/decHealthincLove10/incLove/dogpenguinhealth100/healthlove0/lovedecHealth15/decHealthincLove8/incLove/penguin/pet完成用时:15分钟指导——使用DOM解析XML文档训练要点:使用DOM解析XML文档的基本步骤JDK中DOM的主要接口及方法的使用需求说明:使用DOM解析保存宠物信息的XML文件,并输出显示宠物的相关信息实现思路:在Java项目TestXML下创建类TestDOM,包含main方法在main方法中编写代码,使用DOM解析XML文档pet.conf