您现在的位置: 启天网 >> 技术中心 >> Java >> 正文
今天是:
Java中的XML解析器           ★★★★★ 【字体:
Java中的XML解析器
作者:佚名    文章来源:本站原创    点击数:    更新时间:2008-8-14
XML解析器是XML和应用程序之间的一个软件组织,其目的是为应用程序从XML文件中解析出所需要的数据。有两种类型的解析器:基于DOM的解析器和基于事件的解析器。

浏览器的XML解析器只检查XML文件是否规范。当用浏览器打开一个有效的XML文件时,浏览器的XML解析器仅仅检查XML文件所关联的DTD文件是否有语法错误,并不检查XML文件是否遵守该DTD规定的约束条件。使用DOM解析器来检查一个XML文件是否有效。

DOM解析器的核心是在内存中建立和XML文件相对应的树形结构数据,XML文件的标记、标记的文本内容、实体等都会和内存中树状结构之数据的某个节点相对应。使用DOM解析器的好处是:一个应用程序可以方便地操作内存中树的节点来处理XML文档,获取自己所需的数据。
Example:
1、使用javax.xml.parsers包中的DocumentBuilderFactory类调用其类方法newInstance()实例化一个DocumentBuilderFactory对象:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
2、factory 对象调用newDocumentBuilder()方法返回一个DocumentBuilder对象(称做DOM解析器):
DocumentBuilder builder = factory.newDocumentBuilder();
DocumentBuilder类在javax.xml.parsers包中。
3、builder 对象调用public Document parse(File f)方法解析参数f指定的文件,并将解析内容以对象的形式返回,该对象是实现了Document接口的一个实例,例如:
Document document = builder.parse(new File("price.xml"));
Document接口在org.w3c.dom包中。
注意:如果想要DocumentBuilderFactory产生的DOM解析器支持名称空间,可以让factory 对象调用
setNamespaceAware(boolean b)方法:
factory .setNamespaceAware(true);
4、对象Document是由实现了Node接口的类的实例构成的,这些实例称做Document对象中的节点。Document调用NodeList getElementsByTagName(String str)方法,返回一个实现了NodeList接口的对象,该对象也是由一些Node对象组成的,例如:
NodeList nodelist = document.getElementsByTagName("车次");
NodeList接口在org.w3c.dom包中。假如XML文件中有两个名称为“车次”标记,那么nodelist.getLength();
返回的值是2,即nodelist刚好含有2个Node对象。
DOM解析器经常使用下述3个方法解析XML文件:
public Document parse(File f) throws SAXException,IOException
public Document parse(InputStream in) throws SAXException,IOException
public Doucment parse(String uri) throws SAXException,IOException
方法parse(File f)可以解析参数f指定的XML文件,例如:
File f = new File("price.xml");
Document document = builder.parse(f);
方法parse(InputStream in)可以解析输入流参数in指向的XML文件,例如:
FileInputStream in = new FileInputStream("price.xml");
Document document = builder.parse(in);
方法parse(String uri)可以解析参数uri指定的一个有效的资源,如果uri是一个连接地址,该连接地址必须是可以访问的,例如:
String uri = "http://192.168.0.200/price.xml"
Document document = builder.parse(uri);

SAX解析器的核心是事件处理机制,和DOM解析器相比,SAX解析器占有的内存少,对于许多应用程序,使用SAX解析器来获取XML数据具有较高的效率。
Example:
1、使用javax.xml.parsers包中的SAXParserFactory类调用其类方法newInstance()实例化一个SAXParserFactory对象:
SAXParserFactory factory = SAXParserFactory.newInstance();
2、factory 对象调用newSAXParser()方法返回一个SAXParser对象(称做SAX解析器):
SAXParser saxParser = factory.newSAXParser();
SAXParser类在javax.xml.parsers包中。
注意:如果想要SAXParserFactory产生的SAX解析器支持名称空间,可以让factory 对象调用
setNamespaceAware(boolean b)方法:
factory .setNamespaceAware(true);
3、SAX解析器使用下述parse()方法解析XML文件:
Public void parse(File f,DefaultHandler dh) throws SAXException,IOExcepyion
Public void parse(InputStream is,DefaultHandler dh) throws SAXException,IOException
Public void parse(String uri,DefaultHandler dh) throws SAXException,IOException
Public void parse(String uri) throws IOException,SAXException
上述parse方法的参数dh是DefaultHandler类型,解析器调用parse方法时,必须向dh传递一个DefaultHandler类或子类的对象,DefaultHandler是org.xml.sax.helpers包中的类,该类或其子类的对象称作解析器的事件处理器。
事件处理器调用的方法:
文件开始
startDocument()
开始标记
startElement(String uri,String localName,String qName,Attributes atts)
参数atts是解析器发现的标记的全部属性,参数uri是解析器发现的标记的名称空间,localName是标记的名称,qName是带名称空间前缀的标记名称或标记的名称(依赖于该标记是否有名称空间)。如果标记没有名称空间,uri值为null。
文本
Characters(char[] ch,int start,int length)
结束标记
endElement(String uri,String localName,String qName)
文件结束
endDocument()
文章录入:junsan    责任编辑:junsan05 
  • 上一篇文章:
  • 下一篇文章:
  • 最新热点 最新推荐 相关文章
    Java中不要裸写代码
    Java多线程杂谈
    两个变量交换的三种方法
    网站登录记忆跳转jsp实现的一种方法
    策略模式及实现
    IIS+tomcat整合,并且通过域名访问网站
    Java实现按字节长度截取字符串
    Java多线程技术中所有方法的详细解析
    JAVA中的接口和抽象类(加深初学者理解)
    Java开发者需坚守的十大基本准则
     网友评论:(最新10条。只代表网友观点,与本站立场无关!)