JAXP

JAXPJava API for XML Processing,意为XML处理的Java API)是Java XML程序设计应用程序接口之一,它提供解析和验证XML文档的能力。JAXP是在Java社区进程下开发的,包括JSR 5 (JAXP 1.0)和 JSR 63 (JAXP 1.1和1.2)两个规范。

JAXP解析XML的三种基本接口为:

除了解析接口,JAXP还提供了XSLT接口用来对XML文档进行数据和结构的转换。

DOM接口

DOM接口可能最容易理解。解析器解析整个XML文档并构造出该文档的一个完整的内存表示,使用类对文档对象模型(DOM)级别2核心规范[1]中的概念进行建模。

DOM解析器被称作DocumentBuilder,因为它构建一个内存中的Document表示。javax.xml.parsers.DocumentBuilder是由javax.xml.parsers.DocumentBuilderFactory创建的。DocumentBuilder创建org.w3c.dom.Document的实例,Document是一个包含XML文档中的所有节点的树。结构中的每一个树节点实现org.w3c.dom.Node接口。树节点有许多不同类型的,表示XML文档中不同的数据类型。最重要的节点类型有:

  • 元素节点,具有许多属性
  • 文本节点,代表文档元素开始和结束标签之间的文字。

节点类型的完整列表,请参见org.w3c.dom包中的Javadoc文档。

SAX接口

SAX解析器被称作SAXParser,SAXParser是由javax.xml.parsers.SAXParserFactory创建的。与DOM解析器不同,SAX解析器并不创建XML文档的内存表示,因此要更快使用更少的内存。而是,SAX解析器通过调用回调方法将XML文档结构告知客户端,也就是说,通过调用提供给解析器的org.xml.sax.helpers.DefaultHandler实例上的方法。

DefaultHandler类实现了ContentHandlerErrorHandlerDTDHandler以及EntityResolver等接口。大多数客户端甘心ContentHandler接口中定义的方法,当SAX解析器在XML文档中遇到元素时,相应的方法将被调用。接口中最重要的方法有:

  • startDocument()endDocument()方法,当XML文档的开始和结束时被调用。
  • startElement()endElement()方法,当一个文档元素开始和结束时被调用。
  • characters()方法,调用处理XML文档元素的开始标签和结束标签之间的文本数据。

客户端提供一个DefaultHandler的子类,实现这些方法,并在方法中对数据进行处理,可能会将数据存入数据库,或写出到流中。

在解析过程中,解析器可能需要访问外部文档。因此可能会使用XML Catalog将经常使用的XML文档存储在本地的缓存中。

SAX接口是在2000年5月发布的Java 1.3中引入的。[2]

StAX接口

StAX的设计介于DOM和SAX接口之间,在它的隐喻中,程序的入口点是一个代表文档中一个位置的光标。应用程序可以按需向前移动光标 – 从解析器中“拉”出信息。这与基于事件的API(如SAX)不同,SAX将数据“推”给应用程序,要求应用程序维护事件间的状态,如果应用需要知道在文档中的位置信息。

XSLT接口

XSLT(可扩展样式表转换语言)允许将XML文档转换为数据其他形式。应用程序使用javax.xml.transform包中的接口可以进行XSLT转换。接口最初被称为TrAX (Transformation API for XML),是由许多Java XSLT处理器的开发人员通过非正式协作开发的。

接口的主要特性包括:

  • 工厂类javax.xml.transform.TransformerFactory可以使应用动态地选择使用哪一个XSLT处理器。
  • TransformerFactory上的方法用来创建javax.xml.transform.Templates对象, 表示样式表的编译后的形式。这是一个线程安全的对象,可以重复使用,顺序或并发,在多个源文档上应用同一个样式表(或用用一个源文档,不同的参数)
  • Templates上的方法可以创建javax.xml.transform.Transformer,表示样式表的可执行形式。Transformer不可以在线程间共享,虽然也是可重用的。Transformer提供方法设置样式表参数和序列化选项(例如,输出是否缩进),以及一个实际运行转换的方法。

JAXP定义了javax.xml.transform.Sourcejavax.xml.transform.Result两个抽象接口来表示转换的输入和输出。某种程度上,这是非常规使用Java接口,这是因为并不期待一个处理器会接受任何实现该接口的类,每一个处理器可以选择支持那些SourceResult的处理。实际上所有JAXP处理器支持三种标准类型的SourceDOMSourceSAXSourceStreamSource)以及三种标准类型的ResultDOMResultSAXResultStreamResult)以及处理器自己的实现。

版本

J2SE版本其中的JAX版本
1.41.1
1.51.3
1.61.4

JAXP 1.4.4于2010年9月3日发布。JAXP 1.3已经于2008年2月12日产品终结。[3]

参见

外部链接

参考文献

  1. . [2011-04-01]. (原始内容存档于2020-12-19).
  2. Compare the Java 1.2.1 API index 页面存档备份,存于 with the 1.3 index 页面存档备份,存于. The Java Specification Request (JSR) 5, XML Parsing Specification, was finalised on 21 March, 2000 页面存档备份,存于.
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.