JSP与XML

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

使用SAX API处理XML文档
• 在SAX接口中,事件源是org.xml.sax包中的 XMLReader,它通过parse()方法来开始解析XML文 档并根据文档内容产生事件: public void parse(InputSource input)throws java.io .IOException,SAXException
• 利用SAX解析XML文档,实际就是要实 现这四个事件处理器的接口,为这些接 口的所有方法编写处理过程,然后在 XMLReader中注册这些方法。
• org.xml.sax.helpers已经定义了 DefaultHandler类,该类已经完全实现 了ContentHandler,DTDHandler, ErrorHandler以及 EntityResolver这四 个接口,因此只需要继承 DefaultHandler类,就可以自定义自己 的事件处理器,而不必去花时间重写每 一个方法。
JSP访问XML数据方式
• DOM方式和SAX方式 • DOM 方式解析XML是基于对象的原理,当用 DOM解析XML时它会在内存中生成一个树形 的结构来表示一个XML文档。树上的每个节点 代表着XML文档中的一个节点。
XML 文档 DOM解析器 XML 树
DOM是由W3C提出的,基于DOM的解析需要实现org.w3c.dom.*接口。
SAX API库的主要类
SAX工作原理
• SAX则是采用基于事件驱动的处理模式, 它将XML文档转化成一系列的事件,由 单独的事件处理器来决定如何处理。
SAX所使用的基于事件驱动的处理模式
• 基于事件的处理模式主要是围绕着事件源以及事件处 理器(或者叫监听器)来工作的。一个可以产生事件 的对象被称为事件源,而可以针对事件产生响应的对 象就被叫做事件处理器。事件源和事件处理器是通过 在事件源中的事件处理器注册方法连接的。这样当事 件源产生事件后,调用事件处理器相应的处理方法, 一个事件就获得了处理。当然在事件源调用事件处理 器中特定方法的时候,会传递给事件处理器相应事件 的状态信息,这样事件处理器才能够根据事件信息来 决定自己的行为。
使用DOM解析XML
• javax.xml.parsers这个包向用户提供了两个 重要的工厂类,SAXParserFactory 和 DocumentBuilderFactory,分别实现了 org.xml.sax.Parser接口和org.w3c.dom.*接口。 相应地,javax.xml.parsers包提供了 SAXParser 和DocumentBuilder两个类。 • 使用 javax.xml.parsers.DocumentBuilderFactory 来得到 DocumentBuilder的一个实例,用于 处理生成XML 文档
resume.xml
XML简介
• XML是采用树状结构来描述数据的,在 这种“树状结构”中,各节点间层次关 系非常清晰,这种“树状结构”,有一 个专门的称谓,即文档对象模型 (Document Object Model,DOM)。
DOM和SAX
• DOM在XML中是一个非常重要的概念,DOM 提供了XML和其他应用程序进行交互的标准接 口。W3C在1998年就已经将浏览器用来解析 XML文件的DOM规范标准化,微软则针对 Internet Explorer实现了自己的DOM规范, 该规范和W3C DOM规范十分接近,同时还提 供了本身的专利接口,以强化自身独特的应用 技术。
JSP与XML
XML简介
• XML(eXtensible Markup Language,可扩 展标记语言)于1998年正式成为W3C (World Wide Web Consortium)的标准, 其诞生之初就是为互联网量身定制,具有良好 的逻辑结构,从而成为W3C所推荐的互联网 信息技术。 • XML最重要的功能是用来创建、描述和存储数 据信息,以便各种Web应用可以基于XML进 行更方便的数据交换。
org.w3c.dom包中包含用于解析XML 的主要方法
方法 getNodeValue setNodeValue getNodeType getParentNode getChildNodes getFirstChild getLastChild previousSibling nextSibling getAttributes getOwnerDocument appendChild removeChild 返回节点值字符串 为节点设置值 返回节点的类型 返回当前节点所在层次的父节点 返回当前节点的所有子节点 返回当前节点的第一个子节点 返回当前节点的最后一个子节点 当前节点同一层次的上一个节点 当前节点同一层次的下一个节点 按节点名称访问节点属性 返回对当前节点所属xml文档的引用 为当前节点添加一个子节点,添加位置为子节点列表的末尾 删除一个子节点 说明
• //实例化DocumentBuilderFactory工厂类 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); • //得到DocumentBuilder实例对象 DocumentBuilder builder = factory.newDocumentBuilder(); • //用DocumentBuilder解析XML文档 • //得到一个实现了org.w3c.dom.Document的对象 Document document = builder.parse("test.xml");
• 事件处理器则是org.xml.sax包中的ContentHandler, DTDHandler,ErrorHandler以及 EntityResolver这 四个接口,它们分别处理事件源在解析过程中产生的 不同种类的事件。
• 事件源XMLReader和这四个事件处理器的连接是通过在 XMLReader中的相应的事件处理器注册方法setXXX()来完成的. • 例如: • //注册处理外部实体的EntityResolver • public void setEntityResolver(EntityResolver resolver) • //注册处理DTD解析事件的DTDHandler • public void setDTDHandler(DTDHandler handler) • //注册处理XML文档内容解析事件的ContentHandler • public void setContentHandler(ContentHandler handler) • //注册处理文档解析错误事件的ErrorHandler • public void setErrorHandler(ErrorHandler handler)
domsample.jsp
在JSP中利用DOM解析该 XML文件
domsample2.jsp
元素 vs 节点
• 元素继承自节点,因此元素也一定是一个节点,其类 型为“元素节点”(ELEMENT_NODE)。元素是一个 范围的概念,必须是含有完整信息的节点才是一个 “元素节点”,例如:“<Name>Eric</Name>”就是 一个“元素节点”。 • 节点本身是一个抽象的概念,元素节点、属性节点甚 至纯文本都可以看成是一个节点,但纯文本不是“元 素节点”。例如“<Name>Eric</Name>”中的“Eric” 就是一个节点,同时也是“<Name>Eric</Name>”这 个元素节点的子节点,所以程序中是通过 getFirstChild()方法才能获取到该节点对象。
使用DOM解析XML
• SUN的JAXP :Java API for XML Parsing , 包含了以下一些Java包:
javax.xml.parsers 提供处理XML文档的类。 org.w3c.dom 为文档对象模型 (DOM) 提供接口。 org.xml.sax 提供了SAX方式解析XML的核心API。 javax.xml.transform 定义了用于处理转换指令,以及执行从源到结果的转换的一般 API。
SAX API库的主要接口和类
主要接口: • Attributes 关于 XML 属性列表的接口,供访问元素的属性列表而用。 • ContentHandler 处理解析XML文档内容时产生的事件。 • DTDHandler 处理解析DTD时的相应事件。 • EntityResolver 用于解析实体的基本接口。 • ErrorHandler 处理解析过程中所遇到的文档错误事件。 • Locator 为了定位解析中产生的内容事件在文档中的位置而准备的一个定位 器接口。 • XMLFilter 提供了一个方便应用开发的过滤器接口。 • XMLReader 任何兼容SAX 2.0的解析器都要实现这个接口,这个接口让应用程 序可以设置或查找features和properties,注册各种事件处理器,以及 开始解析文档。
SAX API中包含有三个包:org.xml.sax、org.xml.sax.ext 和 org.xml.sax.helpers。 • org.xml.sax中主要定义了SAX的一些基础接口,如XMLReader、 ContentHandler、ErrorHandler、DTDHandler、 EntityResolver等。 • org.xml.sax.ext是为了兼容SAX 1.0而存在,其中的方法都已经 过时。 • 在 org.xml.sax.helpers中则是一些方便开发人员使用的帮助类, 其中包括对引导基于 SAX 的应用程序的支持,如缺省实现所有 处理器接口的帮助类DefaultHandler、方便开发人员创建 XMLReader的XMLReaderFactory类等。
使用SAX解析XML
• SAX(Simple API for XML)由 XML-DEV 邮件列表的成员开发维护的一个开源软件。并 且SAX是一个彻底的自由软件,它的作者放弃 了对它的所有权利,它可以被许可用于任何目 的。 • 到目前为止SAX的版本已经发展到2.0,在这 个最新版本中增加了对名称空间 (Namespaces)的支持以及对文档的有效性 进行验证。
SAX
• 全称是Simple APIs for XML • 它是根据实际应用需求定义的一套对XML文档进行操 作的接口规范。 • SAX提供了一种对XML文档进行顺序访问的模式,使 用SAX解析器对XML文档进行分析时,文档被看作为 一个流,当遇到“&l符时,会触发一系列事件,并激活相应的事件处理函 数,从而完成对XML文档数据的访问,所以 SAX接 口也被称作事件驱动接口 • 基本原理是由接口的使用者提供符合接口规范的处理 器。一般SAX接口都是用JAVA实现的。
• InputSource :为XML实体准备的输入源。 • SAXException :封装了一般的SAX错误和警告。 • SAXNotRecognizedException :为识别不出某些标识 而抛出的异常。 • SAXNotSupportedException :为不支持某个操作而 抛出的异常。 • SAXParseException :封装了一个关于XML解析的错 误或者警告。 • AttributesImpl :Attributes 接口的默认实现。 • DefaultHandler:SAX 2.0 事件处理程序的默认基类。 • NamespaceSupport:封装名称空间逻辑,以便由使用 SAX 的应用程序使用,或由 SAX 驱动程序内部使用。 • ParserAdapter:将 SAX1 Parser 适配为 SAX2 XMLReader。 • XMLFilterImpl:派生 XML 过滤器的基类。 • XMLReaderAdapter:将 SAX 2.0 XMLReader 适配 为 SAX 1.0 解析器。 • XMLReaderFactory:创建 XML 阅读器的工厂
相关文档
最新文档