版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
xml的四种解析方法及源代码(SAX、DOM、JDOM、DOM4J)第一种:SAX解析SAX处理机制:SAX是一种基于事件驱动的API。利用SAX解析XML文档,牵涉到两个部分:解析器和事件处理器。解析器负责读取XML文档,并向事件处理器发生事件,如元素开始和元素结束事件;而事件处理器则负责对事件做出响应,对传递的XML数据进行处理。测试用的xml文件:db.xmlXml代码.菱<?xmlversion=〃1.0"encoding=〃UTF-8〃?><!--<!DOCTYPEdbconfigSYSTEM"db.dtd">--><dbconfig><dbtype="oracle"><driver>oracle.jdbc.driver.OracleDriver</driver><url>jdbc:oracle:thin:@localhost:1521:oracle</url><user>scott</user><password>tiger</password></db></dbconfig><?xmlversion="1.0"encoding="UTF-8"?><!--<!DOCTYPEdbconfigSYSTEM"db.dtd">--><dbconfig><dbtype="oracle"><driver>oracle.jdbc.driver.OracleDriver</driver><url>jdbc:oracle:thin:@localhost:1521:oracle</url><user>scott</user><password>tiger</password></db></dbconfig>DTD文件db.dtdXml代码巨<!ELEMENTdbconfig(db+)><!ELEMENTdb(driver,url,user,password)><!ELEMENTdriver(#PCDATA)><!ELEMENTurl(#PCDATA)><!ELEMENTuser(#PCDATA)><!ELEMENTpassword(#PCDATA)><!ATTLISTdbtypeCDATA#REQUIRED><!ELEMENTdbconfig(db+)><!ELEMENTdb(driver,url,user,password)><!ELEMENTdriver(#PCDATA)><!ELEMENTurl(#PCDATA)><!ELEMENTuser(#PCDATA)><!ELEMENTpassword(#PCDATA)><!ATTLISTdbtypeCDATA#REQUIRED>SAX解析实例一org.xml.sax.DefalutHandler类:可以扩展该类,给出自己的解析实现SAXPrinter.javaJava代码_■importjava.io.File;importjavax.xml.parsers.SAXParser;importjavax.xml.parsers.SAXParserFactory;importorg.xml.sax.Attributes;importorg.xml.sax.SAXException;importorg.xml.sax.helpers.DefaultHandler;publicclassSAXPrinterextendsDefaultHandler(/***//***文档开始事件*/publicvoidstartDocument()throwsSAXException(System.out.println(〃<?xmlversion=\〃1.0\〃encoding=\"utf-8\〃?>〃);}/***//***接收处理指令事件*/publicvoidprocessingInstruction(Stringtarget,Stringdata)throwsSAXException(System.out.println(〃<?〃+target+〃〃+data+〃?>〃);}/***//***元素开始事件*参数说明:uri-名称空间URI,如果元素没有任何名称空间URI,或者没有正在执行名称空间处理,则为空字符串。localName-本地名称(不带前缀),如果没有正在执行名称空间处理,则为空字符串。qName-限定的名称(带有前缀),如果限定的名称不可用,则为空字符串。attributes-附加到元素的属性。如果没有属性,则它将是空的Attributes对象。*/publicvoidstartElement(Stringuri,StringlocalName,StringqName,Attributesattrs)throwsSAXException(System.out.print(〃<〃+qName);//输出元素名称intlen=attrs.getLength();//元素属性列表长度〃利用循环输出属性列表for(inti=0;i<len;i++)(System.out.print("");System.out.print(attrs.getQName(i));System.out.print(〃二\〃〃);System.out.print(attrs.getValue(i));System.out.print(〃\〃〃);}System.out.print(〃>〃);}/***//***元素中字符数据事件:接收元素中字符数据*注意:1.应用程序不要试图读取ch数组指定范围外的数据,(即start至length之外)2.有些解析器将使用ignorableWhitespace()方法来报告元素内容中的空白,而不是characters()方法,如:进行有效性验证的解析器*/publicvoidcharacters(char[]ch,intstart,intlength)throwsSAXException(System.out.print(newString(ch,start,length));}/***//***结束元素事件*/publicvoidendElement(Stringuri,StringlocalName,StringqName)throwsSAXException(System.out.print(〃</〃+qName+〃>〃);}publicstaticvoidmain(String[]args)SAXParserFactoryspf=SAXParserFactory.newInstance();try(SAXParsersp二spf.newSAXParser();sp.parse(newFile(〃db.xml〃),newSAXPrinter());}catch(Exceptione)(e.printStackTrace();}}}importjava.io.File;importjavax.xml.parsers.SAXParser;importjavax.xml.parsers.SAXParserFactory;importorg.xml.sax.Attributes;importorg.xml.sax.SAXException;importorg.xml.sax.helpers.DefaultHandler;publicclassSAXPrinterextendsDefaultHandler(/***//***文档开始事件*/publicvoidstartDocument()throwsSAXException(System.out.println("<?xmlversion=\"1.0\"encoding=\〃utf-8\〃?>〃);}/***//***接收处理指令事件*/publicvoidprocessingInstruction(Stringtarget,Stringdata)throwsSAXException(System.out.println(〃<?〃+target+〃〃+data+〃?>〃);}/***//***元素开始事件*参数说明:uri-名称空间URI,如果元素没有任何名称空间URI,或者没有正在执行名称空间处理,则为空字符串。localName-本地名称(不带前缀),如果没有正在执行名称空间处理,则为空字符串。qName-限定的名称(带有前缀),如果限定的名称不可用,则为空字符串。attributes-附加到元素的属性。如果没有属性,则它将是空的Attributes对象。*/publicvoidstartElement(Stringuri,StringlocalName,StringqName,Attributesattrs)throwsSAXException(System.out.print(〃<〃+qName);//输出元素名称intlen=attrs.getLength();//元素属性列表长度〃利用循环输出属性列表for(inti=0;i<len;i++)(System.out.print("");System.out.print(attrs.getQName(i));System.out.print(〃二\〃〃);System.out.print(attrs.getValue(i));System.out.print(〃\〃〃);}System.out.print(〃>〃);}/***//***元素中字符数据事件:接收元素中字符数据*注意:1.应用程序不要试图读取ch数组指定范围外的数据,(即start至length之外)2.有些解析器将使用ignorableWhitespace()方法来报告元素内容中的空白,而不是characters()方法,如:进行有效性验证的解析器*/publicvoidcharacters(char[]ch,intstart,intlength)throwsSAXException(System.out.print(newString(ch,start,length));}/***//***结束元素事件*/publicvoidendElement(Stringuri,StringlocalName,StringqName)throwsSAXException(System.out.print(〃</〃+qName+〃>〃);}publicstaticvoidmain(String[]args)(SAXParserFactoryspf二SAXParserFactory.newInstance();try(SAXParsersp=spf.newSAXParser();sp.parse(newFile(〃db.xml〃),newSAXPrinter());}catch(Exceptione)(e.printStackTrace();}}}SAX解析实例二org.xml.sax.ContentHandler接口:通过实现该接口给出自己的解析实现。org.xml.sax.ErrorHandler接口:如果SAX应用程序需要实现定制的错误处理,那么它必须实现这个接口,并调用XMLReader对象的setErrorHandler()方法向解析器注册异常处理实例,这样,解析器将通过这个接口报告所有的错误和警告。ContentHandlerImpl.javaJava代码貌.importorg.xml.sax.Attributes;importorg.xml.sax.ContentHandler;importorg.xml.sax.Locator;importorg.xml.sax.SAXException;publicclassContentHandlerImplimplementsContentHandler(/***//***文档开始事件*/publicvoidstartDocument()throwsSAXException(System.out.println(〃<?xmlversion=\〃1.0\〃encoding=\〃utf-8\〃?>");/***//***接收处理指令事件*/publicvoidprocessingInstruction(Stringtarget,Stringdata)throwsSAXException(System.out.println(〃<?〃+target+〃〃+data+〃?>〃);}/***//***元素开始事件*参数说明:uri-名称空间URI,如果元素没有任何名称空间URI,或者没有正在执行名称空间处理,则为空字符串。localName-本地名称(不带前缀),如果没有正在执行名称空间处理,则为空字符串。qName-限定的名称(带有前缀),如果限定的名称不可用,则为空字符串。attributes-附加到元素的属性。如果没有属性,则它将是空的Attributes对象。*/publicvoidstartElement(Stringuri,StringlocalName,StringqName,Attributesattrs)throwsSAXException(System.out.print(〃<〃+qName);//输出元素名称intlen=attrs.getLength();//元素属性列表长度〃利用循环输出属性列表for(inti=0;i<len;i++)(System.out.print("");System.out.print(attrs.getQName(i));System.out.print(〃二\〃〃);System.out.print(attrs.getValue(i));System.out.print(〃\〃〃);}System.out.print(〃>〃);}/***//***元素中字符数据事件:接收元素中字符数据*注意:1.应用程序不要试图读取ch数组指定范围外的数据,(即start至length之外)*2.有些解析器将使用ignorableWhitespace()方法来报告元素内容中的空白,而不是characters。方法,如:进行有效性验证的解析器*/publicvoidcharacters(char[]ch,intstart,intlength)throwsSAXException(System.out.print(newString(ch,start,length));}/***//***结束元素事件*/publicvoidendElement(Stringuri,StringlocalName,StringqName)throwsSAXException(System.out.print(〃</〃+qName+〃>〃);}publicvoidendDocument()throwsSAXException(}publicvoidendPrefixMapping(Stringprefix)throwsSAXException(}publicvoidignorableWhitespace(char[]ch,intstart,intlength)throwsSAXException(}publicvoidsetDocumentLocator(Locatorlocator)(}publicvoidskippedEntity(Stringname)throwsSAXException(publicvoidstartPrefixMapping(Stringprefix,Stringuri)throwsSAXException(}}importorg.xml.sax.Attributes;importorg.xml.sax.ContentHandler;importorg.xml.sax.Locator;importorg.xml.sax.SAXException;publicclassContentHandlerImplimplementsContentHandler(/***//***文档开始事件*/publicvoidstartDocument()throwsSAXException(System.out.println("<?xmlversion=\"1.0\"encoding=\〃utf-8\〃?>〃);}/***//***接收处理指令事件*/publicvoidprocessingInstruction(Stringtarget,Stringdata)throwsSAXException(System.out.println(〃<?〃+target+〃〃+data+〃?>〃);}/***//***元素开始事件*参数说明:uri-名称空间URI,如果元素没有任何名称空间URI,或者没有正在执行名称空间处理,则为空字符串。localName-本地名称(不带前缀),如果没有正在执行名称空间处理,则为空字符串。qName-限定的名称(带有前缀),如果限定的名称不可用,则为空字符串。attributes-附加到元素的属性。如果没有属性,则它将是空的Attributes对象。*/publicvoidstartElement(Stringuri,StringlocalName,StringqName,Attributesattrs)throwsSAXException(System.out.print(〃<〃+qName);//输出元素名称intlen=attrs.getLength();//元素属性列表长度〃利用循环输出属性列表for(inti=0;i<len;i++)(System.out.print("");System.out.print(attrs.getQName(i));System.out.print(〃二\〃〃);System.out.print(attrs.getValue(i));System.out.print(〃\〃〃);}System.out.print(〃>〃);}/***//***元素中字符数据事件:接收元素中字符数据*注意:1.应用程序不要试图读取ch数组指定范围外的数据,(即start至length之外)2.有些解析器将使用ignorableWhitespace()方法来报告元素内容中的空白,而不是characters()方法,如:进行有效性验证的解析器*/publicvoidcharacters(char[]ch,intstart,intlength)throwsSAXException(System.out.print(newString(ch,start,length));}/***//***结束元素事件*/publicvoidendElement(Stringuri,StringlocalName,StringqName)throwsSAXException(System.out.print(〃</〃+qName+〃>〃);}publicvoidendDocument()throwsSAXException(}publicvoidendPrefixMapping(Stringprefix)throwsSAXException(}publicvoidignorableWhitespace(char[]ch,intstart,intlength)throwsSAXException(}publicvoidsetDocumentLocator(Locatorlocator)(}publicvoidskippedEntity(Stringname)throwsSAXException(}publicvoidstartPrefixMapping(Stringprefix,Stringuri)throwsSAXException(}}ErrorHandlerImpl.javaJava代码©publicclassErrorHandlerImplimplementsErrorHandler(publicvoidwarning(SAXParseExceptione)throwsSAXException(System.out.println(〃[Warning]〃+getLocationString(e)+〃:〃+e.getMessage());}publicvoiderror(SAXParseExceptione)throwsSAXException(System.out.println("[Error]〃+getLocationString(e)+〃:〃+e.getMessage());}publicvoidfatalError(SAXParseExceptione)throwsSAXException(System.out.println("[FatalError]"+getLocationString(e)+":"+e.getMessage());}privateStringgetLocationString(SAXParseExceptione)(StringBuffersb=newStringBuffer();StringpublicId二e.getPublicId();if(publicId!二null)(sb.append(publicId);sb.append("");}StringsystemId=e.getSystemId();if(systemId!=null)(sb.append(systemId);sb.append("");}sb.append(e.getLineNumber());sb.append(":");sb.append(e.getColumnNumber());returnsb.toString();}1.}publicclassErrorHandlerImplimplementsErrorHandler(publicvoidwarning(SAXParseExceptione)throwsSAXException(System.out.println("[Warning]〃+getLocationString(e)+〃:〃+e.getMessage());}publicvoiderror(SAXParseExceptione)throwsSAXException(System.out.println(〃[Error]〃+getLocationString(e)+〃:〃+e.getMessage());}publicvoidfatalError(SAXParseExceptione)throwsSAXException(System.out.println(〃[FatalError]〃+getLocationString(e)+〃:〃+e.getMessage());}privateStringgetLocationString(SAXParseExceptione)(StringBuffersb=newStringBuffer();StringpublicId二e.getPublicId();if(publicId!二null)(sb.append(publicId);sb.append(〃");}StringsystemId=e.getSystemId();if(systemId!=null)(sb.append(systemId);sb.append(〃");}sb.append(e.getLineNumber());sb.append(〃:〃);sb.append(e.getColumnNumber());returnsb.toString();}}SaxParserTest.javaJava代码importjava.io.FileInputStream;importorg.xml.sax.InputSource;importorg.xml.sax.XMLReader;importorg.xml.sax.helpers.XMLReaderFactory;publicclassSaxParserTest(publicstaticvoidmain(String[]args)(try(XMLReaderxmlReader二XMLReaderFactory.createXMLReader();//关闭或打开验证xmlReader.setFeature("/sax/features/validation",true);〃注册事件处理器xmlReader.setContentHandler(newContentHandlerImpl());〃注册异常处理器xmlReader.setErrorHandler(newErrorHandlerImpl());xmlReader.parse(newInputSource(newFileInputStream("saxdb.xml")));}catch(Exceptione)(System.out.println(e.getMessage());}}}importjava.io.FileInputStream;importorg.xml.sax.InputSource;importorg.xml.sax.XMLReader;importorg.xml.sax.helpers.XMLReaderFactory;publicclassSaxParserTest(publicstaticvoidmain(String[]args)(try(XMLReaderxmlReader二XMLReaderFactory.createXMLReader();//关闭或打开验证xmlReader.setFeature("/sax/features/validation”,true);//注册事件处理器xmlReader.setContentHandler(newContentHandlerImpl());//注册异常处理器xmlReader.setErrorHandler(newErrorHandlerImpl());xmlReader.parse(newInputSource(newFileInputStream(〃saxdb.xml〃)));}catch(Exceptione)(System.out.println(e.getMessage());}}}第二种:DOM解析DOM中的核心概念就是节点。DOM在分析XML文档时,将将组成XML文档的各个部分(元素、属性、文本、注释、处理指令等)映射为一个对象(节点)。在内存中,这些节点形成一课文档树。整棵树是一个节点,树中的每一个节点也是一棵树(子树),可以说,DOM就是对这棵树的一个对象描述,我们通过访问树中的节点来存取XML文档的内容。PS:属性节点是附属于元素的,不能被看做是元素的子节点,更不能作为一个单独的节点DOMPrinter.javaJava代码_■importorg.w3c.dom.Document;importorg.w3c.dom.NamedNodeMap;importorg.w3c.dom.Node;ernal.parsers.DOMParser;publicclassDOMPrinter(publicstaticvoidmain(String[]args)(try(/***//**获取Document对象*/DOMParserparser=newDOMParser();parser.parse(〃db.xml〃);Documentdocument=parser.getDocument();printNode(document);}catch(Exceptione)(e.printStackTrace();}}publicstaticvoidprintNode(Nodenode)(shortnodeType二node.getNodeType();switch(nodeType)(caseNode.PROCESSING_INSTRUCTION_NODE://预处理指令类型printNodelnfo(node);break;caseNode.ELEMENT_NODE://元素节点类型printNodeInfo(node);printAttribute(node);break;caseNode.TEXT_NODE://文本节点类型printNodeInfo(node);break;default:break;}Nodechild二node.getFirstChild();while(child!=null)(printNode(child);child二child.getNextSibling();}}/***//***根据节点类型打印节点*@paramnode*/publicstaticvoidprintNodeInfo(Nodenode)(if(node.getNodeType()==Node.ELEMENT_NODE)(System.out.println("NodeName:"+node.getNodeName());}elseif(node.getNodeType()==Node.TEXT_NODE)(Stringvalue=node.getNodeValue().trim();if(!value.equals(〃〃))System.out.println("NodeValue:"+value);elseSystem.out.println();}else(System.out.println(node.getNodeName()+":"+node.getNodeValue());}}/***//***打印节点属性*@paramaNode节点*/publicstaticvoidprintAttribute(NodeaNode)(NamedNodeMapattrs=aNode.getAttributes();if(attrs!二null)(for(inti=0;i<attrs.getLength();i++)(NodeattNode=attrs.item(i);System.out.println("Attribute:"+attNode.getNodeName()+〃二\〃〃+attNode.getNodeValue()+〃\〃〃);}}}importorg.w3c.dom.Document;importorg.w3c.dom.NamedNodeMap;importorg.w3c.dom.Node;ernal.parsers.DOMParser;publicclassDOMPrinter(publicstaticvoidmain(String[]args)(try(/***//**获取Document对象*/DOMParserparser=newDOMParser();parser.parse(〃db.xml〃);Documentdocument=parser.getDocument();printNode(document);}catch(Exceptione)(e.printStackTrace();}publicstaticvoidprintNode(Nodenode)(shortnodeType二node.getNodeType();switch(nodeType)(caseNode.PROCESSING_INSTRUCTION_NODE://预处理指令类型printNodeInfo(node);break;caseNode.ELEMENT_NODE://元素节点类型printNodeInfo(node);printAttribute(node);break;caseNode.TEXT_NODE://文本节点类型printNodeInfo(node);break;default:break;}Nodechild二node.getFirstChild();while(child!=null)(printNode(child);child二child.getNextSibling();}}/***//***根据节点类型打印节点*@paramnode*/publicstaticvoidprintNodeInfo(Nodenode)(if(node.getNodeType()==Node.ELEMENT_NODE)(System.out.println("NodeName:"+node.getNodeName());}elseif(node.getNodeType()==Node.TEXT_NODE)(Stringvalue=node.getNodeValue().trim();if(!value.equals(〃〃))System.out.println("NodeValue:"+value);elseSystem.out.println();}else(System.out.println(node.getNodeName()+〃:〃+node.getNodeValue());}}/***//***打印节点属性*@paramaNode节点*/publicstaticvoidprintAttribute(NodeaNode)(NamedNodeMapattrs=aNode.getAttributes();if(attrs!二null)(for(inti=0;i<attrs.getLength();i++)(NodeattNode=attrs.item(i);System.out.println(〃Attribute:"+attNode.getNodeName()+〃二、〃〃+attNode.getNodeValue()+〃\〃〃);}}}DOM生成XML文档:DOMCreateExample.javaJava代码_■importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;importjavax.xml.parsers.DocumentBuilder;importjavax.xml.parsers.DocumentBuilderFactory;importjavax.xml.parsers.ParserConfigurationException;importorg.w3c.dom.Document;importorg.w3c.dom.Element;ernal.serialize.XMLSerializer;publicclassDOMCreateExample(publicstaticvoidmain(String[]args)throwsParserConfigurationException(//DOMImplementationdomImp=DOMImplementationImpl.getDOMImplementation。;DocumentBuilderFactorybuilderFact=DocumentBuilderFactory.newInstance();DocumentBuilderbuilder=builderFact.newDocumentBuilder();Documentdoc=builder.newDocument();//Documentdoc=domImp.createDocument(null,null,null);Elementroot=doc.createElement(〃games〃);Elementchild1=doc.createElement(〃game〃);child1.appendChild(doc.createTextNode("FinalFantasyVII"));child1.setAttribute("genre","rpg");root.appendChild(child1);doc.appendChild(root);XMLSerializerserial;try(serial=newXMLSerializer(newFileOutputStream("domcreate.xml"),null);serial.serialize(doc);}catch(FileNotFoundExceptione1)(e1.printStackTrace();}catch(IOExceptione)(e.printStackTrace();}}}importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;importjavax.xml.parsers.DocumentBuilder;importjavax.xml.parsers.DocumentBuilderFactory;importjavax.xml.parsers.ParserConfigurationException;importorg.w3c.dom.Document;importorg.w3c.dom.Element;ernal.serialize.XMLSerializer;publicclassDOMCreateExample(publicstaticvoidmain(String[]args)throwsParserConfigurationException(//DOMImplementationdomImp=DOMImplementationImpl.getDOMImplementation();DocumentBuilderFactorybuilderFact=DocumentBuilderFactory.newInstance();DocumentBuilderbuilder=builderFact.newDocumentBuilder();Documentdoc=builder.newDocument();//Documentdoc=domImp.createDocument(null,null,null);Elementroot=doc.createElement(〃games〃);Elementchild1=doc.createElement(〃game〃);child1.appendChild(doc.createTextNode(〃FinalFantasyVII"));child1.setAttribute(〃genre〃,"rpg");root.appendChild(child1);doc.appendChild(root);XMLSerializerserial;try(serial=newXMLSerializer(newFileOutputStream("domcreate.xml"),null);serial.serialize(doc);}catch(FileNotFoundExceptione1)(e1.printStackTrace();}catch(IOExceptione)(e.printStackTrace();}}}第三种JDOM解析JDOM利用了java语言的优秀特性,极大地简化了对XML文档的处理,相比DOM简单易用。JDOM也使用对象树来表示XML文档,JDOM使用SAXj解析器来分析XML文档,构建JDOM树。然而JOMD本身并没有提供解析器,它使用其他开发商提供的标准SAX解析器,JDOM默认通过JAXP来选择解析器,可以通过手动知道解析器的类名来设置。首先要在工程中添加jdom的jar包,这里使用jdom1.0.jar。(见附件)JDOMConvert.javaJava代码_■importjava.io.File;importorg.jdom.Document;importorg.jdom.Element;importorg.jdom.input.SAXBuilder;importorg.jdom.output.Format;importorg.jdom.output.XMLOutputter;publicclassJDOMConvert(publicstaticvoidmain(String[]args)(SAXBuildersaxBuilder=newSAXBuilder();try(Documentdoc=saxBuilder.build(newFile(〃domdb.xml〃));〃首先创建好节点ElementeltDb=newElement(〃db〃);ElementeltDriver=newElement(〃driver〃);ElementeltUrl=newElement(〃url〃);ElementeltUser=newElement(〃user〃);ElementeltPassword=newElement(〃password〃);//设置节点的值eltDriver.setText(〃com.mysql.jdbc.Driver〃);eltUrl.setText(〃jdbc:mysql://localhost/mySql〃);eltUser.setText(〃root〃);eltPassword.setText(〃xlc〃);//添加到根节点eltDb.addContent(eltDriver);eltDb.addContent(eltUrl);eltDb.addContent(eltUser);eltDb.addContent(eltPassword);〃根节点设置属性eltDb.setAttribute(〃type〃,〃mysql〃);Elementroot二doc.getRootElement();//root.removeChild(〃db〃);//删除节点root.addContent(eltDb);//增加节点〃修改db节点中内容root.getChild(〃db〃).getChild(〃user〃).setText(〃system〃);root.getChild(〃db〃).getChild(〃password〃).setText(〃manager〃);XMLOutputterxmlOut=newXMLOutputter();//设置XML格式Formatfmt二Format.getPrettyFormat();fmt.setIndent("");fmt.setEncoding(〃utf-8〃);xmlOut.setFormat(fmt);xmlOut.output(doc,System.out);}catch(Exceptione)(e.printStackTrace();}}}importjava.io.File;importorg.jdom.Document;importorg.jdom.Element;importorg.jdom.input.SAXBuilder;importorg.jdom.output.Format;importorg.jdom.output.XMLOutputter;publicclassJDOMConvert(publicstaticvoidmain(String[]args)(SAXBuildersaxBuilder=newSAXBuilder();try(Documentdoc二saxBuilder.build(newFile("domdb.xml"));〃首先创建好节点ElementeltDb=newElement("db");ElementeltDriver=newElement("driver");ElementeltUrl=newElement("url");ElementeltUser=newElement(〃user〃);ElementeltPassword=newElement(〃password〃);//设置节点的值eltDriver.setText(〃com.mysql.jdbc.Driver〃);eltUrl.setText(〃jdbc:mysql://localhost/mySql〃);eltUser.setText(〃root〃);eltPassword.setText(〃xlc〃);//添加到根节点eltDb.addContent(eltDriver);eltDb.addContent(eltUrl);eltDb.addContent(eltUser);eltDb.addContent(eltPassword);〃根节点设置属性eltDb.setAttribute(〃type〃,〃mysql〃);Elementroot二doc.getRootElement();//root.removeChild(〃db〃);//删除节点root.addContent(eltDb);//增加节点〃修改db节点中内容root.getChild(〃db〃).getChild(〃user〃).setText(〃system〃);root.getChild(〃db〃).getChild(〃password〃).setText(〃manager〃);XMLOutputterxmlOut=newXMLOutputter();〃设置XML格式Formatfmt二Format.getPrettyFormat();fmt.setIndent(〃");fmt.setEncoding(〃utf-8〃);xmlOut.setFormat(fmt);xmlOut.output(doc,System.out);}catch(Exceptione)(e.printStackTrace();}}}JDOM生成XML文档:JDOMCreate.javaJava代码_■importjava.io.IOException;importorg.jdom.Document;importorg.jdom.Element;importorg.jdom.output.XMLOutputter;publicclassJDOMCreate(publicstaticvoidmain(String[]args)(Documentdoc=newDocument(newElement("games"));ElementnewGame=newElement(〃game〃).setText(〃FinalFantasyVI");doc.getRootElement().addContent(newGame);newGame.setAttribute("genre”,"rpg");XMLOutputterdomstream=newXMLOutputter();try(domstream.output(doc,System.out);}catch(lOExceptione)(e.printStackTrace();}}}importjava.io.IOException;importorg.jdom.Document;importorg.jdom.Element;importorg.jdom.output.XMLOutputter;publicclassJDOMCreate(publicstaticvoidmain(String[]args)(Documentdoc=newDocument(newElement("games"));ElementnewGame=newElement("game").setText("FinalFantasyVI");doc.getRootElement().addContent(newGame);newGame.setAttribute("genre","rpg");XMLOutputterdomstream=newXMLOutputter();try(domstream.output(doc,System.out);}catch(lOExceptione)(e.printStackTrace();}}}第四种:DOM4J解析dom4j与JDOM一样,也是一种用于解析XML文档的开放源代码的XML框架,dom4j也应用于java平台,dom4jAPI使用了java集合框架并完全支持DOM、SAX和JAXP。与JDOM不同的是,dom4j使用接口和抽象类,虽然dom4j的API相对复杂些,但它提供了比JDOM更好的灵活性。dom4j也使用SAX解析器来分析XML文档,创建dom4j树。此外dom4j也可以接收DOM格式的内容,并提供了从dom4j树到SAX事件流或W3CDOM树的输出机制。与JDOM不同,dom4j自带了一个SAX解析器Aelfred2,如果没有显示的设置SAX解析器,也没有通过系统属性org.xml.sax.driver设置解析器,dom3j将会使用JAXP来加载JAXP配置的解析器,如果创建解析器失败,那么最后才使用dom4j自带的Aelfred2解析器。同样,首先要在工程中添加dom4j的jar包,这里使用dom4j-1.6.1.jar。(见附件)Dom4j生成XML文档db.xml:Dom4jCreate.javaJava代码辑.importjava.io.IOException;importorg.dom4j.Document;importorg.dom4j.DocumentHelper;importorg.dom4j.Element;importorg.dom4j.io.OutputFormat;importorg.dom4j.io.XMLWriter;publicclassDom4jCreate(publicstaticvoidmain(String[]args)(Documentdoc=DocumentHelper.createDocument();doc.addProcessingInstruction(〃xml-stylesheet〃,"type='text/xsl'href='db.xsl'");doc.addDocType("dbconfig",null,"db.dtd");//Elementroot二DocumentHelper.createElement("dbconfig");//doc.setRootElement(root);Elementroot=doc.addElement("dbconfig");ElementeltDb=root.addElement("db");ElementeltDriver=eltDb.addElement("driver");ElementeltUrl=eltDb.addElement("url");ElementeltUser=eltDb.addElement(〃user〃);ElementeltPassword=eltDb.addElement(〃password〃);eltDriver.setText(〃com.mysql.jdbc.Driver〃);eltUrl.setText(〃jdbc:mysql://localhost/mySql〃);eltUser.setText(〃root〃);eltPassword.setText(〃xlc〃);eltDb.addAttribute(〃type〃,〃mysql〃);try(//设置输出格式OutputFormatoutFmt=newOutputFormat("",true);outFmt.setEncoding("UTF-8");/**//*PrintWriterpw=newPrintWriter(System.out);doc.write(pw);pw.flush();pw.close();*/XMLWriterxmlWriter=newXMLWriter(System.out,outFmt);//XMLWriterxmlWriter=newXMLWriter(newFileWriter("db.xml),outFmt);xmlWriter.write(doc);xmlWriter.flush();xmlWriter.close();}catch(lOExceptione)(e.printStackTrace();}}}importjava.io.IOException;importorg.dom4j.Document;importorg.dom4j.DocumentHelper;importorg.dom4j.Element;importorg.dom4j.io.OutputFormat;importorg.dom4j.io.XMLWriter;publicclassDom4jCreate(publicstaticvoidmain(String[]args)Documentdoc=DocumentHelper.createDocument();doc.addProcessingInstruction(〃xml-stylesheet〃,"type='text/xsl'href='db.xsl'");doc.addDocType(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年土木工程项目方案合同
- 2025年机器人在制造业应用推广项目可行性研究报告
- 2025年新型仓储管理系统开发项目可行性研究报告
- 2025年微型化生活服务机器人研发项目可行性研究报告
- 2025年共享经济商业模式研究可行性研究报告
- 羽毛球转让协议书
- 位合同转让协议
- 会议椅子协议书
- 2025年远程办公解决方案研发项目可行性研究报告
- 停薪保职协议书
- 文冠果整形修剪课件
- 2025年下半年上海当代艺术博物馆公开招聘工作人员(第二批)参考笔试试题及答案解析
- 2026国家粮食和物资储备局垂直管理局事业单位招聘应届毕业生27人考试历年真题汇编附答案解析
- 癌性疼痛的中医治疗
- 大学生就业面试培训
- 2026年旅行社经营管理(旅行社管理)考题及答案
- 2026年北京第一次普通高中学业水平合格性考试化学仿真模拟卷01(考试版)
- 东北三省精准教学联盟2025年12月高三联考语文
- 物业服务协议转让合同
- 2025-2026学年上学期初中生物北师大新版八年级期末必刷常考题之性状遗传有一定的规律性
- 国家开放大学《商务英语4》期末考试精准题库
评论
0/150
提交评论