共1页 | 上一页 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 -Djavax.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公司提供的解析器。
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 -Djavax.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公司提供的解析器。
共1页 | 上一页 1 下一页



使用JAXP API

coresun_szw





