前端之家收集整理的这篇文章主要介绍了
操作xml文件:DOM、SAX、JDOM、JAXB、Dom4J,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_301_1@1. DOM(Document Object Model)
此 方法主要由W3C提供,它将xml文件全部读入内存中,然后将各个元素组成一棵数据树,以便快速的访问各个节点 。 因此非常消耗系统性能 ,对比较大的文档不适宜采用DOM方法来解析。 DOM API 直接沿袭了 XML 规范。每个结点都可以扩展的基于 Node 的接口,就多态性的观点来讲,它是优秀的,但是在 Java 语言中的应用不方便,并且可读性不强。
实例:
- importjavax.xml.parsers.*;
-
- importorg.w3c.dom.*;
- //XML的DOM实现
- importorg.apache.crimson.tree.XmlDocument;
- //写XML文件要用到
- DocumentBuilderFactoryfactory=DocumentBuilderFactory.newInstance();
- //允许名字空间
- factory.setNamespaceAware(true);
- //允许验证
- factory.setValidating(//获得DocumentBuilder的一个实例
- try{
- DocumentBuilderbuilder=factory.newDocumentBuilder();
- }catch(ParserConfigurationExceptionpce){
- System.err.println(pce);
- //出异常时输出异常信息,然后退出,下同
- System.exit(1);
- }
- //解析文档,并获得一个Document实例。
- Documentdoc=builder.parse(fileURI);
- catch(DOMExceptiondom){
- System.err.println(dom.getMessage());
- catch(IOExceptionioe){
- System.err.println(ioe);
- //获得根节点StuInfo
- ElementelmtStuInfo=doc.getDocumentElement();
- //得到所有student节点
- NodeListnlStudent=elmtStuInfo.getElementsByTagNameNS(
- strNamespace,"student");
- for(……){
- //当前student节点元素
- ElementelmtStudent=(Element)nlStudent.item(i);
- NodeListnlCurrent=elmtStudent.getElementsByTagNameNS(
- "name");
- }
对于读取得方法其实是很简单的,写入xml文件也是一样不复杂。
2.SAX (Simple API for XML)
此方法主要由XML-DEV 邮件列表的成员开发的,SAX是基于事件的方法,它很类似于标签库的处理机制,在标签开始、结束以及错误发生等等地方调用相应的接口实现方法,不是全部文 档都读入内存。 SAX具有优异的性能和利用更少的存储空间特点。SAX 的设计只考虑了功能的强大性,却没有考虑程序员使用起来是否方便。
使用必须扩展ContentHandler、ErrorHandler、DTDHandler等,但是必须扩展ContentHandler(或者DefaultHandler )。
importorg.xml.sax.*;
publicclassMyContentHandlerimplementsContentHandler{
……
/**
*当其他某一个调用事件发生时,先调用此方法来在文档中定位。
*@paramlocator
*/
voidsetDocumentLocator(Locatorlocator){
*在解析整个文档开始时调用
*@throwsSAXException
voidstartDocument()throwsSAXException{
System.out.println("**Studentinformationstart**");
*在解析整个文档结束时调用
voidendDocument() System.out.println("****Studentinformationend****");
*在解析名字空间开始时调用
*@paramprefix
*@paramuri
voidstartPrefixMapping(Stringprefix
,Stringuri)*在解析名字空间结束时调用
voidendPrefixMapping(Stringprefix)*在解析元素开始时调用
*@paramnamespaceURI
*@paramlocalName
*@paramqName
*@paramatts
voidstartElement(StringnamespaceURI,StringlocalName
/**在解析元素结束时调用
*@paramlocalName本地名,如student
*@paramqName原始名,如LIT:student
*@throwsSAXException*/
voidendElement(StringnamespaceURI,StringlocalName,StringqName)if(localName.equals(“student”)){
System.out.println(localName+":"+currentData);
取得元素数据的方法——characters
取得元素数据中的空白的方法——ignorableWhitespace
在解析到处理指令时调用的方法——processingInstruction
当未验证解析器忽略实体时调用的方法——skippedEntity
运行时,只需要使用下列代码:
MySAXParsermySAXParser=newMySAXParser();
mySAXParser.parserXMLFile("SutInfo.xml");
3.JDOM
JDOM的处理方式有些类似于DOM,但它主要是用SAX实现的 。JDOM用Java的数据类型来定义操作数据树的各个节点 。JDOM的性能也很优越。
Java代码