XML笔记.doc_第1页
XML笔记.doc_第2页
XML笔记.doc_第3页
XML笔记.doc_第4页
XML笔记.doc_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

XML笔记第一天:1、XML是什么?(1)XML是一种元标记语言标记语言:由标记和代码组成,告诉应用程序如何处理。特殊用途标记语言:HTML(Hyper Text Markup Language)例子:javamlic+sherry一般用途标记语言:SGML(Standard Generalized Markup language)(2)XML的核心是数据文档的三个组成部分:数据、结构、样式(示例:书信)XML将文档数据与文档样式(XSL,CSS)、结构分离(DTD,SCHEMA)。(3)XML文档的树型结构示例:first.xml(4)XML的优点自我描述性内容与样式分离支持Unicode字符集(5)XML的使用场合1、数据交换2、Web服务3、内容管理4、Web集成5、配制2、XML文档的框架结构XML文档=序言+元素+杂项(可选)1)序言序言=(XML声明)+(杂项)+(文档类型声明)XML声明如:文档类型声明规定元素的结构和属性列表的取值如:2)元素空元素非空元素内容内容=(子元素|字符数据|字符数据段|引用|处理指令|注释)*子元素字符数据字符数据中,不能含有&,需要采用实体引用的方式字符数据段引用实体引用例子:<hello>"zhangshan"&'lishi'b)then return 1elsereturn 0张19977 -3)杂项处理指令XML为其它应用程序准备的接口。注释空白符指空格、回车等3、格式良好的XML文档(1)文档声明位于文件的开头,“xml与“?之间无空格!(2)唯一根元素(3)标记必须闭合(4)层层嵌套(5)大小写敏感(6)属性必须使用引号(7)注意特殊字符DTD笔记1.DTD是什么?文档类型定义2.DTD的调用方式一:调用内部文档类型定义。注意点:(1)studinfo与(#PCDATA)有空格如:限定在这段代码中使用字符串:(2)文档类型名与根元素名必须一致方式二:调用外部文档类型定义,注意点:(1)standalone=no(2)注意dtd文件的路径例子:!DOCTYPE studinfo /定义之后不能在到他们之间加入字符串引入了DOCTYPE:引入一个文档类型的申明studinfo:文档类型名,SYSTEM:关键字3.DTD的结构元素类型声明指明元素的名称和元素含有的内容。元素类型声明=!ELEMENT 元素名 (元素内容说明)元素内容说明=EMPTY|ANY|混合内容|元素内容|#PCDATA#PCDATA:只有可析的字符数据才能作为元素的内容元素内容:元素内部只能出现指定的子元素示例 dtd3.xml,studinfo3.dtdEMPTY内容:示例dtd4.xml,studinfo4.dtdANY:混合内容:标记文本和可析字符串属性表声明 属性:由“=”分隔的成对的属性名和属性值构成,只能出现在元素标记的内部。结束标记不能带属性,一个元素可以具有多个属性语法:属性取值类型1、CDATA:可析字符2、Enumerated:枚举类型,由“|”分隔的可能的属性值列表属性默认值:注意1、#REQUIRED:必须提供属性值2、IMPLIED:可提供也可不提供3、FIXED:不能修改实体声明实体:存储了任意符合规则的xml文档单元片断。1、内部通用实体定义格式引用格式&实体名;2、外部通用实体引用格式&实体名;例子:声明为是一个xml,支持版本为1.0 的文件,并需要DTD的验证.定义注释语句.可以用两种方式来调用DTD文件:1,内部引用:可以把注释语句中的代码作为正常运行语句,用 ,来包含在中括号里面.而不需要注释下面那一语句.其它语句不变.2,外部引用:将注释中的代码另外生成一个名为:teacher.dtd文件,然后在teacher.xml文件中就使用以下语句进行调用即可.!- 定义一个元素teacher,并包含三个子元素,而且student+为在调用时可支持多个student子元素. 定义子元素,并定义为只可析的字符数据才能作为元素的内容定义子元素,并把这个子元素作为继续包含孙子元素的父元素,因为上面定义过了这两个孙子元素同名的子元素.所以以下可以不在定义这两个孙子元素.定义teacher元素的熟悉course,CDATA:可析字符,#REQUIRED:调用语句中必须提供属性值 定义一个枚举类型,并设置默认值为fish.-用于外部调用语句,在没有上面语句时,可以调用teacher.dtd来验证dtd文件.xml标签语句主体开始,并因为上面声明的属性必需提供属性值.定义子元素的值chengzh28定义孙子元素的值hegh23可以支持多个student子元素,因为”+”声明了多个chenzy24名域1、作用:解决XML文档中命名冲突的问题,即将XML文档与引用URI标识的名域相结合,来限定其中的元素和属性名。2、名域的声明(1)直接定义xmlns:名域前缀=名域的URI(唯一性)类比:名字与身份证(2)缺省定义xmlns=名域的URI3、名域的使用(1)用名域限定元素(2)用名域限定属性4、名域的作用范围名域能够把声明它的元素和该元素的所有子元素关联起来,除非它们被其他的名域声明所覆盖。例子:文件名为:namespace.xml下面的name可以为任意名字. Boy为第一域名空间.由关键字xmlns来指定第二域名空间.区别两个域名空间之间子元素.避免名字相同的子元素冲突.chengzh28zhangbz25或:chengzh28zhangbz25第二天:一,xml文件(二与三都是针对一操作) shangzhang20llaa二, !- xsd与xsd之间引用:在下面语句中加入 xmln:tc=http:/www.sd0606/student来指定地址空间 并加入: 来指定所要引用xsd文件的目标名字空间和文件路径名-三,解析器SAX与DOM一,SAX解析器:事件驱动。当解析器发现元素开始、元素结束、文本、文档的开始或结束等时,发送事件,程序员编写响应这些事件的代码,保存数据。优点:不用事先调入整个文档,占用资源少;SAX解析器代码比DOM解析器代码小,适于Applet,下载 缺点:不是持久的;事件过后,若没保存数据,那么数据就丢了;无状态性;从事件中只能得到文本,但不知该文本属于哪个元素; 使用场合:Applet;只需XML文档的少量内容,很少回头访问;机器内存少SAX处理流程 UNIX color分析这个代码片断的 SAX 处理器一般情况下将产生以下事件: Start documentStart element (samples)Characters (white space)Start element (server)Characters (UNIX)End element (server)Characters (white space)Start element (monitor)Characters (color)End element (monitor)Characters (white space)End element (samples)SAX API 允许开发人员捕捉这些事件并对它们作出反应。SAX 处理涉及以下步骤:创建一个事件处理程序。 创建 SAX 解析器。 向解析器分配事件处理程序。 解析文档,同时向事件处理程序发送每个事件。 选择 DOM 还是选择 SAX,这取决于下面几个因素:应用程序的目的:数据容量:数据多少部分会被使用对速度的需要:对程序的实现:1,XML文件(所要解析的文件)t1t22,解析器程序:(一)package sax.exec;import java.util.Properties;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import org.xml.sax.InputSource;import org.xml.sax.XMLReader;import .URL;public class ParseXML / 定义一个Properties 用来存放 dbhost dbuser dbpassword的值private Properties props;/ 这里的propspublic Properties getProps() return ps;public void parse(String filename) throws Exception / 将我们的解析器对象化ConfigParser handler = new ConfigParser();/ 获取SAX工厂对象SAXParserFactory factory = SAXParserFactory.newInstance();/factory.setNamespaceAware(false);/factory.setValidating(false);/ 获取SAX解析SAXParser parser = factory.newSAXParser();XMLReader xmlReader = parser.getXMLReader();xmlReader.setContentHandler(handler);InputSource source = new InputSource(dbconfig.xml);xmlReader.parse(source);props = handler.getProps(); public static void main(String args)ParseXML test = new ParseXML();try test.parse();Properties prop = test.getProps();System.out.println(prop.getProperty(username);System.out.println(prop.getProperty(password); catch (Exception e) / TODO Auto-generated catch blocke.printStackTrace();(二)package sax.exec;import java.util.Properties;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler;public class ConfigParser extends DefaultHandler / /定义一个Properties 用来存放 dbhost dbuser dbpassword的值private Properties props;private String currentName;private StringBuffer currentValue = new StringBuffer();/ 构建器初始化propspublic ConfigParser() ps = new Properties();public Properties getProps() return ps;/ 定义开始解析元素的方法. 这里是将中的名称xxx提取出来.public void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException currentValue.delete(0, currentValue.length();this.currentName = qName;/ 这里是将之间的值加入到currentValuepublic void characters(char ch, int start, int length)throws SAXException currentValue.append(ch, start, length);/ 在遇到结束后,将之前的名称和值一一对应保存在props中public void endElement(String uri, String localName, String qName)throws SAXException props.put(qName.toLowerCase(), currentValue.toString().trim();DOM解析器DOM (文档对象模型)为 XML 文档的已解析版本定义了一组接口。解析器读入整个文档,然后构建一个驻留内存的树结构,然后代码就可以使用 DOM 接口来操作这个树结构。优点:整个文档树在内存中,便于操作;支持删除、修改、重新排列等多种功能; 缺点:将整个文档调入内存(包括无用的节点),浪费时间和空间; 使用场合:一旦解析了文档还需多次访问这些数据;硬件资源充足(内存、CPU)解析器程序:package dom.sales.add;import java.io.File;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.Node;import org.w3c.dom.NodeList;public class Sales4 private static void visit (Node start) System.out.println(start.getNodeName()+ = +start.getNodeValue(); for (Node child = start.getFirstChild(); child != null; child = child.getNextSibling() visit(child); /* * param args */public static void main(String args) File docFile = new File(sales.xml);Document doc = null;try DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();DocumentBuilder db = dbf.newDocumentBuilder();doc = db.parse(docFile);Element root = doc.getDocumentElement();/第一步,找到所有order(订单)NodeList orders =root.getElementsByTagName(order);/第二步,循环每个订单,进行处理for (int orderNum = 0; orderNum orders.getLength();orderNum+) Element thisOrder = (Element) orders.item(orderNum);/第三步,对每个订单,找到所有itemNodeList orderItems =thisOrder.getElementsByTagName(item);double total = 0;/第四步,对每个item,循环汇总for (int itemNum = 0; itemNum orderItems.getLength(); itemNum+) Element thisOrderItem = (Element) orderItems.item(itemNum);String thisPrice = thisOrderItem.getElementsByTagName(price).item(0).getFirstChild().getNodeValue();double thisPriceDbl

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论