您的位置:首页 > 编程语言 > Java开发

使用java处理XML

2007-06-24 13:45 363 查看
现在,本人知道的使用java来处理xml的方式有以下几种

1-使用Dom解析器(Document Object Model)Dom可以和任何编程语言一起使用

2-使用SAX解析器

3-使用JDOME解析器

也许,还有其他的方式,具体我也不清楚了,下面简单的介绍下Dom解析器,这种很适合用于小的xml文件,因为它会在内存中创建xml的内部表示结构.

一般来说,运用解析xml文件的一般步骤:

1-获取一个javax.xml.parser.DocumentBuiderFactory实例

2-获取一个javax.xml,parsers.documentBuilder实例

3-利用第二步的哪个实例的parser方法解析整个xml文档,返回一个org.w3c.dom.Document对象

4-有了这个对象就好使用这个Document来操作xml文档了

4)DOM4J http://dom4j.sourceforge.net

虽然DOM4J代表了完全独立的开发结果,但最初,它是JDOM的一种智能分支。它合并了许多超出基本XML文档表示的功能,包括集成的XPath支持、XML Schema支持以及用于大文档或流化文档的基于事件的处理。它还提供了构建文档表示的选项,它通过DOM4J API和标准DOM接口具有并行访问功能。从2000下半年开始,它就一直处于开发之中。

为支持所有这些功能,DOM4J使用接口和抽象基本类方法。DOM4J大量使用了API中的Collections类,但是在许多情况下,它还提供一些替代方法以允许更好的性能或更直接的编码方法。直接好处是,虽然DOM4J付出了更复杂的API的代价,但是它提供了比JDOM大得多的灵活性。

在添加灵活性、XPath集成和对大文档处理的目标时,DOM4J的目标与JDOM是一样的:针对Java开发者的易用性和直观操作。它还致力于成为比JDOM更完整的解决方案,实现在本质上处理所有Java/XML问题的目标。在完成该目标时,它比JDOM更少强调防止不正确的应用程序行为。

DOM4J是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。如今你可以看到越来越多的Java软件都在使用DOM4J来读写XML,特别值得一提的是连Sun的JAXM也在用DOM4J.

提示:以上的这个模式:是一个很经典的设计模式----------工厂模式 http://blog.csdn.net/IT_wuwenjie/archive/2007/06/24/1664416.aspx

举例说明:


import javax.xml.parsers.*;


import javax.ejb.SessionBean;


import javax.ejb.SessionContext;


import javax.ejb.CreateException;


import java.io.IOException;


import org.xml.sax.SAXException;


import org.w3c.dom.Document;public class domSimple




...{


public void getDome()




...{


javax.xml.parsers.DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance(); //获取实例


DocumentBuilder fb = null;






try ...{


fb = factory.newDocumentBuilder(); //获取DocumentBuilder实例


Document document=fb.parse(""); //使用该实例解析uri的xml文档




} catch (ParserConfigurationException ex) ...{




} catch (IOException ex) ...{




/** *//** @todo Handle this exception */




} catch (SAXException ex) ...{




/** *//** @todo Handle this exception */


}




}




}

使用SAX来解析XML文档:

SAX是一组操作XML的API,SAX用于解析XML文档,解析器是一个程序,每次只能从XML文档中读取一个字符数据,并返回可管理的数据快,如元素和属性,SAX是基于事件的,常用于服务器端的应用程序,因为他的运行速度快从而是的许多的客户端系统能够同时连接到应用服务器,SAX不会创建内部结构,因此他的运行速度快,不会占用大量的内存空间SAX只是将读去的数据发送给应用程序,由应用程序来决定如何处理显示的数据:

运用SAX解析XML概叙:
1-首先,编写一个类继承org.xml.sax.helpers.DefaultHandler类

2-接着要获取javax.xml.parsers.SAXParserFactory类的一个实例

3-然后创建一个java.xml.parsers.SAXParsers对象

4-最后解析路径uri 的xml文件

代码加解释


package ejb_5;






import java.io.IOException;




import javax.xml.parsers.*;




import org.xml.sax.Attributes;


import org.xml.sax.SAXException;


import org.xml.sax.helpers.DefaultHandler;




/** *//**


*


* <p>使用SAX来解析文档的事例</p>


*


* <p>Description: </p>


*


* <p>Copyright: Copyright (c) 2007</p>


*


* <p>Company: </p>


*


* @author 吴文杰


* @version 1.0


*/




public class myParser extends DefaultHandler ...{ //创建一个类继承DefaultHandler,这个DefaultHandler有很多的方法,需要他的子类重写




public static void main(String[] args) ...{




String uri ="E://myFiel.xml";//比如我在E盘跟目录下创建了个myFiel.xml的文件




try ...{


SAXParserFactory parserFactory = SAXParserFactory.newInstance(); //定义工厂 API,使应用程序能够配置和获取基于 SAX 的解析器以解析 XML 文档。


parserFactory.setValidating(false); //指定由此代码生成的解析器将不会被验证被解析的文档。


parserFactory.setNamespaceAware(false); //指定由此代码生成的解析器将不提供对 XML 名称空间的支持


myParser myParserInstance = new myParser(); //


SAXParser parser = parserFactory.newSAXParser(); //使用当前配置的工厂参数创建 SAXParser 的一个新实例。


parser.parse(uri, myParserInstance); //使用这个SAXParser解析指定的uri下个文档。因为他是基于事件的,所以很多的是要重写DefaultHandle类的方法的




} catch (IOException exception) ...{


exception.printStackTrace();




} catch (SAXException exception) ...{


exception.printStackTrace();




} catch (ParserConfigurationException exception) ...{


exception.printStackTrace();




} catch (FactoryConfigurationError exception) ...{


exception.printStackTrace();


}


}






/** *//**


* @todo Implement method "characters"


*/


public void characters(char[] ch, int start, int length) throws //接收元素中字符数据的通知。 默认情况下,不执行任何操作。应用程序编写者可以重写此方法,以便对每块字符数据采取特定的措施(如将该数据添加到节点或缓冲区,或者将该数据打印到文件)。




SAXException ...{


}






/** *//**


* @todo Implement method "endDocument"


*/




public void endDocument() throws SAXException ...{ // 接收文档结束的通知。当在文档解析结束之后就执行这个方法中的内容了




}






/** *//**


* @todo Implement method "endElement"


*/


public void endElement(String url, String localName, String qName) throws // 接收元素结束的通知。当在文档元素解析结束之后就执行这个方法中的内容了




SAXException ...{




}






/** *//**


* @todo Implement method "startDocument"


*/




public void startDocument() throws SAXException ...{ //接收文档开始的通知,文档开始解析的时候就执行这个方法


}






/** *//**


* @todo Implement method "startElement"


*/


public void startElement(String uri, String localName, String qName,




Attributes attributes) throws SAXException ...{////接收文档元素开始的通知,文档开始元素解析的时候就执行这个方法


}


}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: