XMLは現在、一般的なデータ交換形式になりました。そのプラットフォームに依存しない言語に依存し、システムに依存しないことは、データの統合と相互作用に大きな利便性をもたらします。 XML自体の構文の知識と技術的な詳細については、関連する技術文書を読む必要があります。ここに含まれる内容には、DOM(ドキュメントオブジェクトモデル)、DTD(ドキュメントタイプ定義)、SAX(XMLの単純API)、XSD(XMLスキーマ定義)、XSLT(拡張可能なスタイルシート言語変換)が含まれます。詳細については、詳細については、W3Cの公式Webサイトドキュメントhttp://www.w3.orgを参照してください。
XML解析方法は異なる言語で同じですが、実装構文は異なります。 2つの基本的な分析方法があり、1つはSAXと呼ばれ、もう1つはDOMと呼ばれます。 SAXはイベントストリーム分析に基づいており、DOMはXMLドキュメントツリー構造分析に基づいています。 XMLの内容と構造が次のとおりであるとします。
<?xml version = "1.0" encoding = "utf-8"?> <Employee> <employes> <name> ddviplinux </name> <sex> m </sex> <age> 30 </age> </employee> </employee> </employee>
この記事では、Java言語を使用して、DomとSaxのXMLドキュメントの生成と解析を実装しています。
まず、XMLドキュメントを確立および解析するためのインターフェイスを定義するXMLドキュメントXMLDocumentを操作するためのインターフェイスを定義します。
/ **** @author hongliang.dinghl* XMLドキュメントの確立と解析の間のインターフェイスを定義します*/パブリックインターフェイスXMLDocument {/ *** XMLドキュメントの作成* @param filenameファイルフルパス名*/ public void createxml(string filename); / *** parse xml document* @param filenameファイルフルパス名*/ public void parserxml(string filename); } 1。DOMはXMLドキュメントを生成および解析します
XMLドキュメントの解析バージョンのインターフェイスのセットを定義します。パーサーはドキュメント全体を読み取り、メモリレジデントツリー構造を構築し、コードはDOMインターフェイスを使用してこのツリー構造を操作できます。利点:ドキュメントツリー全体がメモリにあり、操作が簡単です。削除、変更、再配置などのさまざまな機能をサポートします。短所:ドキュメント全体がメモリ(役に立たないノードを含む)に転送され、時間と空間を無駄にします。使用中:ドキュメントが解析されたら、このデータに何度もアクセスする必要があります。十分なハードウェアリソース(メモリ、CPU)。
java.io.fileinputStreamをインポートします。 java.io.filenotfoundexceptionをインポートします。 java.io.fileoutputStreamをインポートします。 java.io.ioexceptionをインポートします。 java.io.inputStreamをインポートします。 java.io.printwriterをインポートします。 javax.xml.parsers.documentbuilderをインポートします。 javax.xml.parsers.documentbuilderfactoryをインポートします。 javax.xml.parsers.parserconfigurationexceptionをインポートします。 javax.xml.transform.outputkeysをインポートします。 javax.xml.transform.transformerをインポートします。 javax.xml.transform.transformerconfigurationexceptionをインポートします。 javax.xml.transform.transformerexceptionをインポートします。 javax.xml.transform.transformerfactoryをインポートします。 javax.xml.transform.domsourceをインポートします。 javax.xml.transform.stream.streamResultをインポートします。 Import org.w3c.dom.document; Import org.w3c.dom.element; Import org.w3c.dom.node; Import org.w3c.dom.nodelist; Import org.xml.sax.saxexception; / ** * * @author hongliang.dinghl * dom生成および解析xmlドキュメント */ public class domdemoはxmldocument {private document document;プライベート文字列ファイル名; public void init(){try {documentBuilderFactory Factory = documentBuilderFactory .NewInstance(); documentBuilder builder = factory.newdocumentBuilder(); this.document = builder.newdocument(); } catch(parserconfigurationexception e){system.out.println(e.getmessage()); }} public void createxml(string filename){要素root = this.document.createelment( "employes"); this.document.appendChild(root); Element Employee = this.document.createelement( "Employee");要素name = this.document.createelement( "name"); name.appendChild(this.document.createTextNode( "Ding Hongliang")); Employee.AppendChild(name); Element Sex = this.document.createelement( "sex"); sex.appendChild(this.document.createTextNode( "m")); employee.appendChild(sex);要素年齢= this.document.createelment( "age"); age.appendChild(this.document.createTextNode( "30")); Employee.AppendChild(age); root.appendChild(従業員); TransformerFactory TF = TransformerFactory.NewInstance(); try {Transformer Transformer = tf.newtransformer(); domsource source = new domsource(document); Transformer.setOutputProperty(outputKeys.encoding、 "gb2312"); Transformer.setOutputProperty(outputKeys.indent、 "yes"); printwriter pw = new Printwriter(new FileOutputStream(filename)); StreamResult result = new StreamResult(PW); Transformer.Transform(ソース、結果); system.out.println( "xmlファイルを正常に生成!"); } catch(transformerconfigurationexception e){system.out.println(e.getmessage()); } catch(IllegalargumentException e){system.out.println(e.getMessage()); } catch(filenotfoundexception e){system.out.println(e.getmessage()); } catch(Transformerexception e){system.out.println(e.getmessage()); }} public void parserxml(string filename){try {documentBuilderFactory dbf = documentBuilderFactory.NewInstance(); documentBuilder db = dbf.newdocumentbuilder(); document document = db.parse(filename); NodeList Employees = document.getChildNodes(); for(int i = 0; i <employes.getLength(); i ++){node Employees = employes.item(i); nodeList employe info = employe.getChildNodes(); for(int j = 0; j <employeinginfo.getLength(); j ++){node node = employeininfo.item(j); nodeList eckeemeta = node.getChildNodes(); for(int k = 0; k <employeemeta.getLength(); k ++){system.out.println(employeemeta.item(k).getNodename() + ":" + employeemeta.item(k).getTextContent(); }}} system.out.println( "parsermeta.item(k).getTextContent());} catch(filenotfoundexception e){system.out.println(e.getmessage());} catch(parserconfigurationexception e){system.out.out.out.out.println(e.getmessage(); (parserconfigurationexception {system.out.println(e.getmessage()) 2。SAXはXMLドキュメントを生成および解析します
DOMの問題を解決するために、SAXが表示されます。サックス、イベント駆動型。パーサーが要素の始まり、要素の終わり、ドキュメントの開始または終了などを発見すると、イベントを送信し、プログラマーはこれらのイベントに応答するコードを書き、データを保存します。利点:事前にドキュメント全体を入力する必要はなく、リソースが少なくなります。 SAXパーサーコードは、アプレットとダウンロードに適したDOMパーサーコードよりも小さくなっています。短所:永続的ではありません。イベントの後、データが保存されない場合、データは失われます。ステートレス性;イベントから取得できますが、テキストのみがテキストを取得できますが、テキストがどの要素に属しているかはわかりません。使用機会:アプレット; XMLドキュメントからの少量のコンテンツのみが必要であり、アクセスに戻ることはめったにありません。マシンメモリは低いです。
java.io.fileinputStreamをインポートします。 java.io.filenotfoundexceptionをインポートします。 java.io.ioexceptionをインポートします。 java.io.inputStreamをインポートします。 javax.xml.parsers.parserconfigurationexceptionをインポートします。 javax.xml.parsers.saxparserをインポートします。 javax.xml.parsers.saxparserfactoryをインポートします。 org.xml.sax.attributesをインポートします。 Import org.xml.sax.saxexception; Import org.xml.sax.helpers.defaulthandler; / ** * * @author hongliang.dinghl * sax document parsing */ public class saxdemoはxmldocument {public void createxml(string filename){system.out.println( "<<"+filename+">>"); } public void parserxml(string filename){saxparserfactory saxfac = saxparserfactory.newinstance(); try {saxparser saxparser = saxfac.newsaxparser(); inputstream is = new fileinputStream(filename); saxparser.parse(is、new mysaxhandler()); } catch(parserconfigurationexception e){e.printstacktrace(); } catch(saxexception e){e.printstacktrace(); } catch(filenotfoundexception e){e.printstacktrace(); } catch(ioexception e){e.printstacktrace(); }} class mySaxhandler extends defaulthandler {boolean hasattribute = false;属性属性= null; public void startdocument()throws saxexception {system.out.println( "ドキュメントが印刷を開始しました"); } public void enddocument()throws saxexception {system.out.println( "ドキュメントは印刷を終了しました"); } public void startelement(string uri、string localname、string qname、属性属性)saxexception {if(qname.equals( "emplosines")){return; } if(qname.equals( "Employee")){system.out.println(qname); } if(attributes.getLength()> 0){this.attributes = attributes; this.hasattribute = true; }} public void endelement(string uri、string localname、string qname)throws saxexception {if(hasattribute &&(attributes!= null)){for(int i = 0; i <attributes.getLength(); i ++){system.out.out.println(actributes.get.getVute(0)+++++++ }}} public void文字(char [] ch、int start、int length)throws saxexception {system.out.println(new String(ch、start、length)); }}パッケージcom.alisoft.facepay.framework.bean; java.io.fileinputStreamをインポートします。 java.io.filenotfoundexceptionをインポートします。 java.io.ioexceptionをインポートします。 java.io.inputStreamをインポートします。 javax.xml.parsers.parserconfigurationexceptionをインポートします。 javax.xml.parsers.saxparserをインポートします。 javax.xml.parsers.saxparserfactoryをインポートします。 org.xml.sax.attributesをインポートします。 Import org.xml.sax.saxexception; Import org.xml.sax.helpers.defaulthandler; / ** * * @author hongliang.dinghl * sax document parsing */ public class saxdemoはxmldocument {public void createxml(string filename){system.out.println( "<<"+filename+">>"); } public void parserxml(string filename){saxparserfactory saxfac = saxparserfactory.newinstance(); try {saxparser saxparser = saxfac.newsaxparser(); inputstream is = new fileinputStream(filename); saxparser.parse(is、new mysaxhandler()); } catch(parserconfigurationexception e){e.printstacktrace(); } catch(saxexception e){e.printstacktrace(); } catch(filenotfoundexception e){e.printstacktrace(); } catch(ioexception e){e.printstacktrace(); }}} class mySaxhandler extends Defaulthandler {boolean hasattribute = false;属性属性= null; public void startdocument()throws saxexception {system.out.println( "ドキュメントが印刷を開始しました"); } public void enddocument()throws saxexception {system.out.println( "ドキュメントは印刷を終了しました"); } public void startelement(string uri、string localname、string qname、属性属性)saxexception {if(qname.equals( "emplosines")){return; } if(qname.equals( "Employee")){system.out.println(qname); } if(attributes.getLength()> 0){this.attributes = attributes; this.hasattribute = true; }} public void endelement(string uri、string localname、string qname)throws saxexception {if(hasattribute &&(attributes!= null)){for(int i = 0; i <attributes.getLength(); i ++){system.out.out.println(actributes.get.getVute(0)+++++++ }}} public void文字(char [] ch、int start、int length)throws saxexception {system.out.println(new String(ch、start、length)); }}3。DOM4JXMLドキュメントを生成および解析します
DOM4Jは非常に優れたJava XML APIであり、優れたパフォーマンス、強力な機能、非常に使いやすいもので、オープンソースソフトウェアでもあります。最近では、ますます多くのJavaソフトウェアがDOM4Jを使用してXMLを読み書きしていることがわかります。 SunのJaxmでさえDom4Jを使用していることに特に言及する価値があります。
java.io.fileをインポートします。 java.io.filewriterをインポートします。 java.io.ioexceptionをインポートします。 java.io.writerをインポートします。 java.util.iteratorをインポートします。 Import org.dom4j.document; Import org.dom4j.documentexception; Import org.dom4j.documenthelper; Import org.dom4j.element; Import org.dom4j.io.saxreader; Import org.dom4j.io.xmlwriter; / ** * * @author hongliang.dinghl * dom4j xmlドキュメントと解析xmlドキュメント */ public class dom4jdemo xmldocument {public void createxml(string filename){documenthelper.createdocument(); Element Employees = document.Addelement( "Employees"); Element Employee = Employees.Addelement( "Employee");要素名= Employee.Addelement( "name"); name.settext( "ddvip"); Element Sex = Employee.Addelement( "sex"); sex.settext( "m"); Element Age = Employee.Addelement( "age"); age.settext( "29"); try {writer filewriter = new filewriter(filename); XMLWriter XMLWriter = new XMLWriter(FileWriter); xmlwriter.write(document); xmlwriter.close(); } catch(ioException e){system.out.println(e.getmessage()); }} public void parserxml(string filename){file inputxml = new file(filename); saxreader saxreader = new saxreader(); try {document document = saxreader.read(inputxml);要素従業員= document.getRootElement(); for(iterator i = Employees.Elementiterator(); i.hasnext();){element Employee =(element)i.next(); for(iterator j = Employee.Elementiterator(); j.hasnext();){element node =(element)j.next(); System.out.println(node.getName()+":"+node.getText()); }}} catch(documentException e){system.out.println(e.getMessage()); } system.out.println( "dom4j parserxml"); }}4。JDOMはXMLを生成および解析します
DOMとSAXのエンコーディング量を減らすために、JDOMが登場しました。利点:20-80原則、コードの量を大幅に削減します。使用機会:実装される機能は、解析、作成などの単純ですが、下部ではJDOMはSAX(最も一般的に使用される)、DOM、ザナンドキュメントを使用しています。
java.io.filenotfoundexceptionをインポートします。 java.io.fileoutputStreamをインポートします。 java.io.ioexceptionをインポートします。 java.util.listをインポートします。 Import org.jdom.document; Import org.jdom.element; org.jdom.jdomexceptionをインポートします。 Import org.jdom.input.saxbuilder; Import org.jdom.output.xmloutputter; / ** * * @author hongliang.dinghl * jdom Generate and parse xml documents * */ public class jdomdemoはxmldocument {public void createxml(string filename){document document;要素ルート; root = new Element( "Employees"); document = new Document(root);要素Employee = new Element( "Employee"); root.addcontent(従業員);要素name = new Element( "name"); name.settext( "ddvip"); employee.addcontent(name);要素sex = new Element( "sex"); sex.settext( "m");従業員。AddContent(sex);要素年齢= new Element( "age"); age.settext( "23"); Employee.AddContent(age); xmloutputter xmlout = new xmloutputter(); try {xmlout.output(document、new fileoutputStream(filename)); } catch(filenotfoundexception e){e.printstacktrace(); } catch(ioexception e){e.printstacktrace(); }} public void parserxml(string filename){saxbuilder builder = new saxbuilder(false); try {document document = builder.build(filename);要素従業員= document.getRootElement(); list employeelist = employee.getChildren( "Employee"); for(int i = 0; iElement Employee =(element)employeelist.get(i); list EmployeeInfo = Employee.getChildren(); for(int j = 0; jsystem.out.println(((element)EmployeingInfo.get(j))。 e){e.printstacktrace();上記はこの記事のすべての内容です。私はそれがすべての人の学習に役立つことを願っています、そして、私は誰もがwulin.comをもっとサポートすることを願っています。