JavaによるXMLを解析するいくつかの方法の概要
最初のタイプ:dom。
DOMのフルネームはドキュメントオブジェクトモデルであり、ドキュメントオブジェクトモデルです。アプリケーションでは、DOMベースのXMLアナライザーはXMLドキュメントをオブジェクトモデルのコレクション(通常はDOMツリーと呼ばれます)に変換します。アプリケーションは、このオブジェクトモデルでの操作を通じてXMLドキュメントデータの操作を実装します。 DOMインターフェイスを介して、アプリケーションはいつでもXMLドキュメントのデータの任意の部分にアクセスできます。したがって、DOMインターフェイスを使用したこのメカニズムは、ランダムアクセスメカニズムとも呼ばれます。
DOMインターフェイスは、階層オブジェクトモデルを介してXMLドキュメント情報にアクセスする方法を提供します。これらの階層オブジェクトモデルは、XMLドキュメント構造に基づいてノードツリーを形成します。 XMLドキュメントで説明されている情報の種類、集計データ、プロジェクトリスト、またはドキュメントに関係なく、DOMを使用して生成されたモデルはノードツリーの形式です。つまり、DOMはXMLドキュメントの情報にアクセスするためにツリーモデルの使用を強制します。 XMLは本質的に階層構造であるため、この説明方法は非常に効果的です。
DOMツリーによって提供されるランダムアクセス方法は、アプリケーションの開発に大きな柔軟性をもたらし、XMLドキュメント全体のコンテンツを任意に制御できます。ただし、DOMアナライザーはXMLドキュメント全体をDOMツリーに変換し、メモリに配置するため、ドキュメントが大きい場合、または構造が比較的複雑な場合、メモリ要件は比較的高くなります。さらに、複雑な構造を持つ木を横断することも時間のかかる動作です。したがって、DOMアナライザーにはマシンのパフォーマンスの要件が比較的高いため、その実装効率はあまり理想的ではありません。ただし、DOMアナライザーが採用したツリー構造のアイデアはXMLドキュメントの構造と一致しており、ランダムアクセスによってもたらされる利便性を考えると、DOMアナライザーは幅広い有用な価値を持っています。
java.io.fileをインポートします。 javax.xml.parsers.documentbuilderをインポートします。 javax.xml.parsers.documentbuilderfactoryをインポートします。 Import org.w3c.dom.document; Import org.w3c.dom.element; Import org.w3c.dom.nodelist; public class domtest1 {public static void main(string [] args)スロー例外{//ステップ1:DOMパーサー工場(作業の機能は特定のパーサーを作成することです)DocumentBuilderFactory DBF = DocumentBuilderFactory.NewInstance(); // system.out.println( "class name:" + dbf.getClass()。getName()); //ステップ2:特定のDom Parser documentBuilder db = dbf.newdocumentBuilder()を取得します。 // system.out.println( "class name:" + db.getClass()。getName()); //ステップ3:XMLドキュメントを解析し、ドキュメントオブジェクト(ルートノード)ドキュメントを取得しますdocument = db.parse(new file( "condation.xml")); nodeList list = document.getElementsByTagname( "person"); for(int i = 0; i <list.getLength(); i ++){要素要素=(要素)list.item(i); string content = element.getElementsByTagname( "name")。item(0).getFirstchild()。getNodevalue(); System.out.println( "name:" + content); content = element.getElementsByTagname( "address")。item(0).getFirstChild()。getNodevalue(); System.out.println( "address:" + content); content = element.getElementsByTagname( "Tel")。アイテム(0).getFirstChild()。getNodevalue(); System.out.println( "tel:" + content); content = element.getElementsByTagname( "fax")。item(0).getFirstchild()。getNodevalue(); System.out.println( "fax:" + content); content = element.getElementsByTagname( "email")。item(0).getFirstchild()。getNodevalue(); System.out.println( "email:" + content); System.out.println("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- java.io.fileをインポートします。 javax.xml.parsers.documentbuilderをインポートします。 javax.xml.parsers.documentbuilderfactoryをインポートします。 Import org.w3c.dom.attr; Import org.w3c.dom.comment; Import org.w3c.dom.document; Import org.w3c.dom.element; Import org.w3c.dom.namednodemap; Import org.w3c.dom.node; Import org.w3c.dom.nodelist; / ** *特定のXMLドキュメントを解析し、その内容をコマンドラインに出力するために再帰的に使用します * @author zhanglong * * */ public class domtest3 {public static void main(string [] args)throws {documentBuilderFactory dbf = documentbuilderfactory.newinstance(); documentBuilder db = dbf.newdocumentbuilder(); document doc = db.parse(new file( "sustent.xml")); //ルート要素ノード要素root = doc.getDocumentElement()を取得します。 Parseelement(root); } private static void parseelement(element element){string tagname = element.getNodename(); NodeList Children = element.getChildNodes(); System.out.print( "<" + tagname); //要素要素のすべての属性で構成される名前のnodemapオブジェクトは、namednodemap map = element.gettributes()で審査する必要があります。 //要素に属性がある場合if(null!= map){for(int i = 0; i <map.getLength(); i ++){//要素attr attr =(attr)map.item(i)の各属性を取得します。 string attrname = attr.getName(); string attrvalue = attr.getValue(); system.out.print( "" + attrname + "=/" " + attrvalue +"/""); }} system.out.print( ">"); for(int i = 0; i <children.getLength(); i ++){node node = children.item(i); // node short nodeType = node.getNodetype()を取得します。 if(nodeType == node.Element_node){//要素であり、再帰的にパーセルメント((要素)ノード)を続けます。 } else if(nodeType == node.text_node){// system.out.print(node.getNodevalue()); } else if(nodeType == node.comment_node){system.out.print( "<! - ");コメントコメント=(コメント)ノード; //コメントコンテンツ文字列data = comment.getData(); System.out.print(data); System.out.print( " - >"); }} system.out.print( "</" + tagname + ">"); }}SAX:SAXのフルネームは、XMLのシンプルなAPIであり、XML Simple Applicationプログラムインターフェイスです。 DOMとは異なり、SAXが提供するアクセスモードはシーケンシャルモードであり、XMLデータをすばやく読み書きする方法です。 XMLドキュメントをSAXアナライザーを使用して分析すると、一連のイベントがトリガーされ、対応するイベント処理機能がアクティブになります。アプリケーションは、これらのイベント処理機能を介してXMLドキュメントにアクセスできます。したがって、SAXインターフェイスは、イベント駆動型インターフェイスとも呼ばれます。
java.io.fileをインポートします。 javax.xml.parsers.saxparserをインポートします。 javax.xml.parsers.saxparserfactoryをインポートします。 org.xml.sax.attributesをインポートします。 Import org.xml.sax.saxexception; Import org.xml.sax.helpers.defaulthandler; public class saxtest1 {public static void main(string [] args)スロー例外{// step1:saxparserfactoryファクトリー= saxparserfactory.newinstance(); //ステップ2:Sax ParserインスタンスSaxParser parser = factory.newsaxparser()を取得します。 // step3:Parser.Parseを開始(new File( "sustent.xml")、new MyHandler()); }} class myhandler拡張defaulthandler {@override public void startdocument()throws saxexception {system.out.println( "parse betterin"); } @Override public void enddocument()throws saxexception {system.out.println( "parse finish"); } @Override public void startelement(string uri、string localname、string qname、属性属性)saxexception {system.out.println( "start element"); } @Override public void Endelement(string uri、string localname、string qname)saxexception {system.out.println( "finish element"); }} java.io.fileをインポートします。 java.util.stackをインポートします。 javax.xml.parsers.saxparserをインポートします。 javax.xml.parsers.saxparserfactoryをインポートします。 org.xml.sax.attributesをインポートします。 Import org.xml.sax.saxexception; Import org.xml.sax.helpers.defaulthandler;パブリッククラスsaxtest2 {public static void main(string [] args)throws exception {saxparserfactory factory = saxparserfactory.newinstance(); saxparser parser = factory.newsaxparser(); parser.parse(new file( "sustent.xml")、new myhandler2()); }} class myhandler2拡張defaulthandler {private stack <string> stack = new stack <string>();プライベート文字列名;プライベートストリングジェンダー;プライベートストリングエイジ; @Override public void startelement(string uri、string localname、string qname、属性属性)saxexception {stack.push(qname); for(int i = 0; i <attributes.getLength(); i ++){string attributes.getQName(i); string attribute = attributes.getValue(i); system.out.println(attrname + "=" + attrvalue); }} @Override public void文字(char [] ch、int start、int length)throws saxexception {string tag = stack.peek(); if( "name" .equals(tag)){name = new String(ch、start、length); } else if( "gender" .equals(tag)){gender = new String(ch、start、length); } else if( "age" .equals(tag)){age = new String(ch、start、length); }} @Override public void endelement(string uri、string localname、string qname)throws saxexception {stack.pop(); //要素が解析されており、スタックからポップアウトする必要があることを示します。 System.out.println( "gender:" + gender); System.out.println( "age:" + age); System.out.println(); }}}JDOM:
JDOMは、ツリー構造に基づいたオープンソースプロジェクトであり、純粋なJavaテクノロジーを使用して、XMLドキュメントに解析、生成、シリアル化、さまざまな操作を実装しています。 (http://jdom.org)
•JDOMはJavaプログラミングを直接提供します。より強力なJava言語(メソッドオーバーロード、コレクションの概念など)の多くの機能を利用して、SAXとDOMの機能を効果的に組み合わせます。
•JDOMは、Java言語でXMLを読み取り、書き込み、操作する新しいAPI関数です。これらのAPI関数は、直接性、シンプルさ、効率の前提の下で最大範囲で最適化されています。
jdom Create XML
java.io.filewriterをインポートします。 org.jdom.attributeをインポートします。 Import org.jdom.comment; Import org.jdom.document; Import org.jdom.element; Import org.jdom.output.format; Import org.jdom.output.xmloutputter; public class jdomtest1 {public static void main(string [] args)throws Exception {document document = new Document();要素root = new Element( "root"); document.addcontent(root);コメントコメント=新しいコメント(「これは私のコメントです」); root.addcontent(コメント);要素e = new Element( "hello"); E.SetAttribute( "Sohu"、 "www.sohu.com"); root.addcontent(e);要素E2 = new Element( "world");属性属性= new Attribute( "Test"、 "Hehe"); e2.setattribute(attr); E.AddContent(E2); e2.AddContent(new Element( "AAA")。SetAttribute( "a"、 "b")。Setattribute( "x"、 "y")。setattribute( "gg"、 "hh")。 Format format = format.getPrettyFormat(); format.setIndent( ""); // format.setEncoding( "gbk"); xmloutputter out = new xmloutputter(format); out.output(document、new filewriter( "jdom.xml")); }}XMLの解析
java.io.fileをインポートします。 java.io.fileoutputStreamをインポートします。 java.util.listをインポートします。 org.jdom.attributeをインポートします。 Import org.jdom.document; Import org.jdom.element; Import org.jdom.input.saxbuilder; Import org.jdom.output.format; Import org.jdom.output.xmloutputter; public class jdomtest2 {public static void main(string [] args)throws exception {saxbuilder builder = new saxbuilder(); document doc = builder.build(new file( "jdom.xml"));要素要素= doc.getRootelement(); System.out.println(element.getName());要素hello = element.getChild( "hello"); System.out.println(hello.getText());リストリスト= hello.getattributes(); for(int i = 0; i <list.size(); i ++){属性属性=(属性)list.get(i); string attrname = attr.getName(); string attrvalue = attr.getValue(); system.out.println(attrname + "=" + attrvalue); } hello.removechild( "world"); xmloutputter out = new xmloutputter(format.getPrettyFormat()。setIndent( "")); out.output(doc、new fileoutputStream( "jdom2.xml")); }}DOM4J
java.io.fileoutputStreamをインポートします。 java.io.filewriterをインポートします。 Import org.dom4j.document; Import org.dom4j.documenthelper; Import org.dom4j.element; Import org.dom4j.io.outputformat; Import org.dom4j.io.xmlwriter; public class test1 {public static void main(string [] args)スロー例外{//ドキュメントを作成し、ドキュメントのルート要素ノードを設定します。 // //要素root = documenthelper.createelement( "desute"); // // document.setrootelement(root); //ドキュメントを作成して、ドキュメントのルート要素ノードを設定します。2番目のメソッド要素root = documenthelper.createelment( "sustent"); document document = documenthelper.createdocument(root); root.addattribute( "name"、 "Zhangsan");要素helloelement = root.addelement( "hello");要素worldelement = root.addelement( "world"); helloelement.settext( "hello"); worldelement.settext( "world"); helloelement.addattribute( "age"、 "20"); xmlwriter xmlwriter = new xmlwriter(); xmlwriter.write(document); outputformat format = new outputFormat( ""、true); xmlwriter xmlwriter2 = new xmlwriter(new fileoutputStream( "Student2.xml")、Format); xmlwriter2.write(document); XMLWriter XMLWriter3 = new XMLWriter(new FileWriter( "sustent3.xml")、Format); xmlwriter3.write(document); xmlwriter3.close(); }} java.io.fileをインポートします。 java.util.iteratorをインポートします。 java.util.listをインポートします。 javax.xml.parsers.documentbuilderをインポートします。 javax.xml.parsers.documentbuilderfactoryをインポートします。 Import org.dom4j.document; Import org.dom4j.element; Import org.dom4j.io.domeder; Import org.dom4j.io.saxreader; public class test2 {public static void main(string [] args)スロー例外{saxreader saxreader = new saxreader(); document doc = saxreader.read(new file( "desudent2.xml"));要素root = doc.getRootelement(); system.out.println( "root要素:" + root.getName()); List ChildList = root.Elements(); system.out.println(childlist.size()); List ChildList2 = root.Elements( "hello"); system.out.println(childlist2.size());要素first = root.element( "hello"); System.out.println(first.attributevalue( "age")); for(iterator iter = root.elementiterator(); iter.hasnext();){element e =(element)iter.next(); system.out.println(e.attributevalue( "age")); } System.out.println("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ documentbuilder.newinstance(); = d.getRootelement(); java.io.filewriterをインポートします。 org.jdom.attributeをインポートします。 Import org.jdom.document; Import org.jdom.element; Import org.jdom.output.format; Import org.jdom.output.xmloutputter; public class test3 {public static void main(string [] args)スロー例外{document document = new Document();要素root = new Element( "連絡先リスト")。setAttribute(new属性( "Company"、 "Group A")); document.addcontent(root);要素contactPerson = new Element( "Contact"); root.addcontent(contactPerson); contactPerson .AddContent(new Element( "name")。Settext( "Zhang San")).AddContent(new Element( "Company")。Settext( "Company")).AddContent(new Element( "Tel")。 Element( "Street")。setText( "5th Street")).AddContent(new Element( "City")。Settext( "Shanghai")).AddContent(new Element( "staun")。 xmloutputter output = new xmloutputter(format.getprettyformat().setIndent( ")。setEncoding(" gbk ")); output.output(document、new filewriter(" contact.xml "));}}}}