loading ...
搜狐圈子 IT数码 web开发 浏览帖子

来自圈子:web开发 (41 人)

圈子描述:创造是一种乐趣
圈子标签:web 开发
web开发
副圈主:
共1页 | 上一页   1   下一页

使用JAXP API 1/?

    为了让我们的应用程序不依赖于具体的解析器,让我们以统一的接口来访问XML文档,Sun公司开发了JAXP(Java API For XML Processing)API。
    JAXP没有扩充解析器新的功能,它是对解析器的一个封装,使开发人员能够独立于具体的解析器,这样我们就可以在应用程序中任意更换解析器,而不用更改应用程序代码。现在主流的解析器都支持DOM和SAX,所以JAXP也都支持。JAXP现在的版本是1.3包含在JDK5.0之中。
    我们可以打开JDK的帮助文档,看看JAXP有那些包组成,如下图:






我们可以将这些包大致分为三组,javax.xml包及子包,org.w3c.dom包及子包,org.xml.sax包及子包。
javax.xml包及子包主要是获取解析器的实例,获取到解析器实例后就可以对XML进行读取,如果我们使用DOM解析,那么就使用org.w3c.dom包及子包中的接口或者类,反之使用org.xml.sax包及子包中的接口或者类。那怎么通过JAXP获取解析器实例呢?
    在javax.xml.parsers这个包中提供了四个类DocumentBuilder、DocumentBuilderFactory、SAXParser、SAXParserFactory 前两个是获取DOM解析器实例的,后两个是获取SAX解析器实例的。

一、获取DOM解析器实例
package coresun.cn;
import java.io.*;
import javax.xml.parsers.*;
import org.w3c.dom.Document;
import org.xml.sax.SAXException;
public class JAXPTest {
    public static void main(String[] args) {
        try {
           
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = factory.newDocumentBuilder();
            Document document = builder.parse(new FileInputStream("my.xml"));
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (SAXException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

以上代码的document对象就是XML文档树,XML文档的数据就在此对象中。

二、JAXP API怎样加载解析器 
1、使用系统属性
    如果我们在调用
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();代码前设置了系统属性,如下:
System.setProperty("javax.xml.parsers.DocumentBuilderFactory","org.apache.xerces.jaxp.DocumentBuilderFactoryImpl");
那么JAXP就会使用你提供的解析器。设置系统属性还可以使用另外一种方式,运行该类的时候使用-D参数,如:java -D
javax.xml.parsers.DocumentBuilderFactory=org.apache.xerces.jaxp.DocumentBuilderFactoryImpl  coresun.cn.JAXPTest

2、在JDK_HOME\JRE\lib文件夹下建立jaxp.properties文件,在文件中添加如下内容:
javax.xml.parsers.DocumentBuilderFactory=org.apache.xerces.jaxp.DocumentBuilderFactoryImpl

3、查找解析器jar文件的META-INF\services目录
    在此目录下如果含有javax.xml.parsers.DocumentBuilderFactory文件,则通过此文件的内容加载解析器。


4、如果前三种方式都没有找到解析器,那么就使用SUN公司提供的解析器。
我是美丽签名档
分享 分享 | 引用 | 回复 | 发表时间:2007-12-15
  • 积分:55
  • 体力:?
  • 头衔:1级 试用期员工
  • 加为好友

1

这里很少有人来,悲哀
我是美丽签名档
引用 | 回复 | 发表时间:2008-01-09
共1页 | 上一页   1   下一页