版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
xml的四種解析方法及源代碼(SAX、DOM、JDOM、DOM4J)第一種:SAX解析SAX處理機(jī)制:SAX是一種基于事件驅(qū)動(dòng)的API。利用SAX解析XML文檔,牽涉到兩個(gè)部分:解析器和事件處理器。解析器負(fù)責(zé)讀取XML文檔,并向事件處理器發(fā)生事件,如元素開始和元素結(jié)束事件;而事件處理器則負(fù)責(zé)對(duì)事件做出響應(yīng),對(duì)傳遞的XML數(shù)據(jù)進(jìn)行處理。測試用的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解析實(shí)例一org.xml.sax.DefalutHandler類:可以擴(kuò)展該類,給出自己的解析實(shí)現(xiàn)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+〃?>〃);}/***//***元素開始事件*參數(shù)說明:uri-名稱空間URI,如果元素沒有任何名稱空間URI,或者沒有正在執(zhí)行名稱空間處理,則為空字符串。localName-本地名稱(不帶前綴),如果沒有正在執(zhí)行名稱空間處理,則為空字符串。qName-限定的名稱(帶有前綴),如果限定的名稱不可用,則為空字符串。attributes-附加到元素的屬性。如果沒有屬性,則它將是空的Attributes對(duì)象。*/publicvoidstartElement(Stringuri,StringlocalName,StringqName,Attributesattrs)throwsSAXException(System.out.print(〃<〃+qName);//輸出元素名稱intlen=attrs.getLength();//元素屬性列表長度〃利用循環(huán)輸出屬性列表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(〃>〃);}/***//***元素中字符數(shù)據(jù)事件:接收元素中字符數(shù)據(jù)*注意:1.應(yīng)用程序不要試圖讀取ch數(shù)組指定范圍外的數(shù)據(jù),(即start至length之外)2.有些解析器將使用ignorableWhitespace()方法來報(bào)告元素內(nèi)容中的空白,而不是characters()方法,如:進(jìn)行有效性驗(yàn)證的解析器*/publicvoidcharacters(char[]ch,intstart,intlength)throwsSAXException(System.out.print(newString(ch,start,length));}/***//***結(jié)束元素事件*/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+〃?>〃);}/***//***元素開始事件*參數(shù)說明:uri-名稱空間URI,如果元素沒有任何名稱空間URI,或者沒有正在執(zhí)行名稱空間處理,則為空字符串。localName-本地名稱(不帶前綴),如果沒有正在執(zhí)行名稱空間處理,則為空字符串。qName-限定的名稱(帶有前綴),如果限定的名稱不可用,則為空字符串。attributes-附加到元素的屬性。如果沒有屬性,則它將是空的Attributes對(duì)象。*/publicvoidstartElement(Stringuri,StringlocalName,StringqName,Attributesattrs)throwsSAXException(System.out.print(〃<〃+qName);//輸出元素名稱intlen=attrs.getLength();//元素屬性列表長度〃利用循環(huán)輸出屬性列表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(〃>〃);}/***//***元素中字符數(shù)據(jù)事件:接收元素中字符數(shù)據(jù)*注意:1.應(yīng)用程序不要試圖讀取ch數(shù)組指定范圍外的數(shù)據(jù),(即start至length之外)2.有些解析器將使用ignorableWhitespace()方法來報(bào)告元素內(nèi)容中的空白,而不是characters()方法,如:進(jìn)行有效性驗(yàn)證的解析器*/publicvoidcharacters(char[]ch,intstart,intlength)throwsSAXException(System.out.print(newString(ch,start,length));}/***//***結(jié)束元素事件*/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解析實(shí)例二org.xml.sax.ContentHandler接口:通過實(shí)現(xiàn)該接口給出自己的解析實(shí)現(xiàn)。org.xml.sax.ErrorHandler接口:如果SAX應(yīng)用程序需要實(shí)現(xiàn)定制的錯(cuò)誤處理,那么它必須實(shí)現(xiàn)這個(gè)接口,并調(diào)用XMLReader對(duì)象的setErrorHandler()方法向解析器注冊異常處理實(shí)例,這樣,解析器將通過這個(gè)接口報(bào)告所有的錯(cuò)誤和警告。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+〃?>〃);}/***//***元素開始事件*參數(shù)說明:uri-名稱空間URI,如果元素沒有任何名稱空間URI,或者沒有正在執(zhí)行名稱空間處理,則為空字符串。localName-本地名稱(不帶前綴),如果沒有正在執(zhí)行名稱空間處理,則為空字符串。qName-限定的名稱(帶有前綴),如果限定的名稱不可用,則為空字符串。attributes-附加到元素的屬性。如果沒有屬性,則它將是空的Attributes對(duì)象。*/publicvoidstartElement(Stringuri,StringlocalName,StringqName,Attributesattrs)throwsSAXException(System.out.print(〃<〃+qName);//輸出元素名稱intlen=attrs.getLength();//元素屬性列表長度〃利用循環(huán)輸出屬性列表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(〃>〃);}/***//***元素中字符數(shù)據(jù)事件:接收元素中字符數(shù)據(jù)*注意:1.應(yīng)用程序不要試圖讀取ch數(shù)組指定范圍外的數(shù)據(jù),(即start至length之外)*2.有些解析器將使用ignorableWhitespace()方法來報(bào)告元素內(nèi)容中的空白,而不是characters。方法,如:進(jìn)行有效性驗(yàn)證的解析器*/publicvoidcharacters(char[]ch,intstart,intlength)throwsSAXException(System.out.print(newString(ch,start,length));}/***//***結(jié)束元素事件*/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+〃?>〃);}/***//***元素開始事件*參數(shù)說明:uri-名稱空間URI,如果元素沒有任何名稱空間URI,或者沒有正在執(zhí)行名稱空間處理,則為空字符串。localName-本地名稱(不帶前綴),如果沒有正在執(zhí)行名稱空間處理,則為空字符串。qName-限定的名稱(帶有前綴),如果限定的名稱不可用,則為空字符串。attributes-附加到元素的屬性。如果沒有屬性,則它將是空的Attributes對(duì)象。*/publicvoidstartElement(Stringuri,StringlocalName,StringqName,Attributesattrs)throwsSAXException(System.out.print(〃<〃+qName);//輸出元素名稱intlen=attrs.getLength();//元素屬性列表長度〃利用循環(huán)輸出屬性列表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(〃>〃);}/***//***元素中字符數(shù)據(jù)事件:接收元素中字符數(shù)據(jù)*注意:1.應(yīng)用程序不要試圖讀取ch數(shù)組指定范圍外的數(shù)據(jù),(即start至length之外)2.有些解析器將使用ignorableWhitespace()方法來報(bào)告元素內(nèi)容中的空白,而不是characters()方法,如:進(jìn)行有效性驗(yàn)證的解析器*/publicvoidcharacters(char[]ch,intstart,intlength)throwsSAXException(System.out.print(newString(ch,start,length));}/***//***結(jié)束元素事件*/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();//關(guān)閉或打開驗(yàn)證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();//關(guān)閉或打開驗(yàn)證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中的核心概念就是節(jié)點(diǎn)。DOM在分析XML文檔時(shí),將將組成XML文檔的各個(gè)部分(元素、屬性、文本、注釋、處理指令等)映射為一個(gè)對(duì)象(節(jié)點(diǎn))。在內(nèi)存中,這些節(jié)點(diǎn)形成一課文檔樹。整棵樹是一個(gè)節(jié)點(diǎn),樹中的每一個(gè)節(jié)點(diǎn)也是一棵樹(子樹),可以說,DOM就是對(duì)這棵樹的一個(gè)對(duì)象描述,我們通過訪問樹中的節(jié)點(diǎn)來存取XML文檔的內(nèi)容。PS:屬性節(jié)點(diǎn)是附屬于元素的,不能被看做是元素的子節(jié)點(diǎn),更不能作為一個(gè)單獨(dú)的節(jié)點(diǎn)DOMPrinter.javaJava代碼_■importorg.w3c.dom.Document;importorg.w3c.dom.NamedNodeMap;importorg.w3c.dom.Node;ernal.parsers.DOMParser;publicclassDOMPrinter(publicstaticvoidmain(String[]args)(try(/***//**獲取Document對(duì)象*/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://預(yù)處理指令類型printNodelnfo(node);break;caseNode.ELEMENT_NODE://元素節(jié)點(diǎn)類型printNodeInfo(node);printAttribute(node);break;caseNode.TEXT_NODE://文本節(jié)點(diǎn)類型printNodeInfo(node);break;default:break;}Nodechild二node.getFirstChild();while(child!=null)(printNode(child);child二child.getNextSibling();}}/***//***根據(jù)節(jié)點(diǎn)類型打印節(jié)點(diǎn)*@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());}}/***//***打印節(jié)點(diǎn)屬性*@paramaNode節(jié)點(diǎn)*/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對(duì)象*/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://預(yù)處理指令類型printNodeInfo(node);break;caseNode.ELEMENT_NODE://元素節(jié)點(diǎn)類型printNodeInfo(node);printAttribute(node);break;caseNode.TEXT_NODE://文本節(jié)點(diǎn)類型printNodeInfo(node);break;default:break;}Nodechild二node.getFirstChild();while(child!=null)(printNode(child);child二child.getNextSibling();}}/***//***根據(jù)節(jié)點(diǎn)類型打印節(jié)點(diǎn)*@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());}}/***//***打印節(jié)點(diǎn)屬性*@paramaNode節(jié)點(diǎn)*/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語言的優(yōu)秀特性,極大地簡化了對(duì)XML文檔的處理,相比DOM簡單易用。JDOM也使用對(duì)象樹來表示XML文檔,JDOM使用SAXj解析器來分析XML文檔,構(gòu)建JDOM樹。然而JOMD本身并沒有提供解析器,它使用其他開發(fā)商提供的標(biāo)準(zhǔn)SAX解析器,JDOM默認(rèn)通過JAXP來選擇解析器,可以通過手動(dòng)知道解析器的類名來設(shè)置。首先要在工程中添加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〃));〃首先創(chuàng)建好節(jié)點(diǎn)ElementeltDb=newElement(〃db〃);ElementeltDriver=newElement(〃driver〃);ElementeltUrl=newElement(〃url〃);ElementeltUser=newElement(〃user〃);ElementeltPassword=newElement(〃password〃);//設(shè)置節(jié)點(diǎn)的值eltDriver.setText(〃com.mysql.jdbc.Driver〃);eltUrl.setText(〃jdbc:mysql://localhost/mySql〃);eltUser.setText(〃root〃);eltPassword.setText(〃xlc〃);//添加到根節(jié)點(diǎn)eltDb.addContent(eltDriver);eltDb.addContent(eltUrl);eltDb.addContent(eltUser);eltDb.addContent(eltPassword);〃根節(jié)點(diǎn)設(shè)置屬性eltDb.setAttribute(〃type〃,〃mysql〃);Elementroot二doc.getRootElement();//root.removeChild(〃db〃);//刪除節(jié)點(diǎn)root.addContent(eltDb);//增加節(jié)點(diǎn)〃修改db節(jié)點(diǎn)中內(nèi)容root.getChild(〃db〃).getChild(〃user〃).setText(〃system〃);root.getChild(〃db〃).getChild(〃password〃).setText(〃manager〃);XMLOutputterxmlOut=newXMLOutputter();//設(shè)置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"));〃首先創(chuàng)建好節(jié)點(diǎn)ElementeltDb=newElement("db");ElementeltDriver=newElement("driver");ElementeltUrl=newElement("url");ElementeltUser=newElement(〃user〃);ElementeltPassword=newElement(〃password〃);//設(shè)置節(jié)點(diǎn)的值eltDriver.setText(〃com.mysql.jdbc.Driver〃);eltUrl.setText(〃jdbc:mysql://localhost/mySql〃);eltUser.setText(〃root〃);eltPassword.setText(〃xlc〃);//添加到根節(jié)點(diǎn)eltDb.addContent(eltDriver);eltDb.addContent(eltUrl);eltDb.addContent(eltUser);eltDb.addContent(eltPassword);〃根節(jié)點(diǎn)設(shè)置屬性eltDb.setAttribute(〃type〃,〃mysql〃);Elementroot二doc.getRootElement();//root.removeChild(〃db〃);//刪除節(jié)點(diǎn)root.addContent(eltDb);//增加節(jié)點(diǎn)〃修改db節(jié)點(diǎn)中內(nèi)容root.getChild(〃db〃).getChild(〃user〃).setText(〃system〃);root.getChild(〃db〃).getChild(〃password〃).setText(〃manager〃);XMLOutputterxmlOut=newXMLOutputter();〃設(shè)置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也應(yīng)用于java平臺(tái),dom4jAPI使用了java集合框架并完全支持DOM、SAX和JAXP。與JDOM不同的是,dom4j使用接口和抽象類,雖然dom4j的API相對(duì)復(fù)雜些,但它提供了比JDOM更好的靈活性。dom4j也使用SAX解析器來分析XML文檔,創(chuàng)建dom4j樹。此外dom4j也可以接收DOM格式的內(nèi)容,并提供了從dom4j樹到SAX事件流或W3CDOM樹的輸出機(jī)制。與JDOM不同,dom4j自帶了一個(gè)SAX解析器Aelfred2,如果沒有顯示的設(shè)置SAX解析器,也沒有通過系統(tǒng)屬性org.xml.sax.driver設(shè)置解析器,dom3j將會(huì)使用JAXP來加載JAXP配置的解析器,如果創(chuàng)建解析器失敗,那么最后才使用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(//設(shè)置輸出格式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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026內(nèi)蒙古呼和浩特新城區(qū)保合少鎮(zhèn)衛(wèi)生院招聘筆試備考題庫及答案解析
- 2026廣東河源市連平縣高莞鎮(zhèn)人民政府應(yīng)急救援中隊(duì)隊(duì)員招聘4人筆試備考試題及答案解析
- 2026貴州安順就業(yè)局招聘2人筆試參考題庫及答案解析
- 2026廣東東莞市寮步鎮(zhèn)社區(qū)衛(wèi)生服務(wù)中心第一次招聘納入崗位管理編制外人員7人筆試模擬試題及答案解析
- 2026青海海西州格爾木市市級(jí)公益性崗位招聘2人筆試參考題庫及答案解析
- 2026湖北武漢大學(xué)人民醫(yī)院潛江醫(yī)院招聘76人考試備考試題及答案解析
- 2026上半年貴州事業(yè)單位聯(lián)考貴州省高級(jí)人民法院招聘1人筆試備考題庫及答案解析
- 2026年度安徽博物院公開招聘工作人員2名考試備考題庫及答案解析
- 2026年中國人民警察大學(xué)公開招聘27人備考題庫及1套完整答案詳解
- 2026云南玉溪市華寧縣衛(wèi)生健康局事業(yè)單位招聘9人備考題庫及答案詳解(新)
- GB 4053.3-2025固定式金屬梯及平臺(tái)安全要求第3部分:工業(yè)防護(hù)欄桿及平臺(tái)
- 2026中央廣播電視總臺(tái)招聘124人參考筆試題庫及答案解析
- JG/T 3030-1995建筑裝飾用不銹鋼焊接管材
- 流程與TOC改善案例
- 【當(dāng)代中國婚禮空間設(shè)計(jì)研究4200字(論文)】
- GB/T 20322-2023石油及天然氣工業(yè)往復(fù)壓縮機(jī)
- 中國重汽車輛識(shí)別代號(hào)(VIN)編制規(guī)則
- 項(xiàng)目管理學(xué)課件戚安邦全
- 羽毛球二級(jí)裁判員試卷
- 通風(fēng)與空調(diào)監(jiān)理實(shí)施細(xì)則abc
- JJF 1614-2017抗生素效價(jià)測定儀校準(zhǔn)規(guī)范
評(píng)論
0/150
提交評(píng)論