สรุปหลายวิธีในการแยก XML โดย Java
ประเภทแรก: dom
ชื่อเต็มของ DOM คือโมเดลวัตถุเอกสารซึ่งเป็นโมเดลวัตถุเอกสาร ในแอปพลิเคชันตัววิเคราะห์ XML ที่ใช้ DOM จะแปลงเอกสาร XML เป็นชุดของโมเดลวัตถุ (โดยปกติเรียกว่าทรี DOM) แอปพลิเคชันใช้การทำงานของข้อมูลเอกสาร XML ผ่านการดำเนินการในโมเดลวัตถุนี้ ผ่านอินเตอร์เฟส DOM แอปพลิเคชันสามารถเข้าถึงส่วนใดส่วนหนึ่งของข้อมูลในเอกสาร XML ได้ตลอดเวลา ดังนั้นกลไกนี้โดยใช้อินเตอร์เฟส DOM จึงเรียกว่ากลไกการเข้าถึงแบบสุ่ม
อินเตอร์เฟส DOM ให้วิธีการเข้าถึงข้อมูลเอกสาร XML ผ่านโมเดลวัตถุแบบลำดับชั้น โมเดลวัตถุลำดับชั้นเหล่านี้สร้างแผนผังโหนดตามโครงสร้างเอกสาร XML โดยไม่คำนึงถึงประเภทของข้อมูลที่อธิบายไว้ในเอกสาร XML แม้กระทั่งข้อมูลตารางรายการโครงการหรือเอกสารโมเดลที่สร้างขึ้นโดยใช้ DOM อยู่ในรูปของแผนผังโหนด นั่นคือ DOM บังคับให้ใช้แบบจำลองต้นไม้เพื่อเข้าถึงข้อมูลในเอกสาร XML เนื่องจาก XML เป็นโครงสร้างแบบลำดับชั้นวิธีคำอธิบายนี้ค่อนข้างมีประสิทธิภาพ
วิธีการเข้าถึงแบบสุ่มที่จัดทำโดย DOM Tree นำความยืดหยุ่นอย่างมากในการพัฒนาแอปพลิเคชันและสามารถควบคุมเนื้อหาในเอกสาร XML ทั้งหมดได้โดยพลการ อย่างไรก็ตามเนื่องจากเครื่องวิเคราะห์ DOM แปลงเอกสาร XML ทั้งหมดเป็นแผนผัง DOM และวางไว้ในหน่วยความจำข้อกำหนดของหน่วยความจำจึงค่อนข้างสูงเมื่อเอกสารมีขนาดใหญ่กว่าหรือโครงสร้างค่อนข้างซับซ้อน ยิ่งไปกว่านั้นการสำรวจต้นไม้ที่มีโครงสร้างที่ซับซ้อนก็เป็นการดำเนินการที่ใช้เวลานาน ดังนั้นนักวิเคราะห์ DOM จึงมีข้อกำหนดค่อนข้างสูงสำหรับประสิทธิภาพของเครื่องและประสิทธิภาพการใช้งานของพวกเขาจึงไม่เหมาะอย่างยิ่ง อย่างไรก็ตามเนื่องจากความคิดของโครงสร้างต้นไม้ที่นำมาใช้โดย DOM Analyzer นั้นสอดคล้องกับโครงสร้างของเอกสาร XML และได้รับความสะดวกสบายที่เกิดจากการเข้าถึงแบบสุ่มตัววิเคราะห์ DOM ยังคงมีค่าที่มีประโยชน์หลากหลาย
นำเข้า Java.io.File; นำเข้า javax.xml.parsers.documentBuilder; นำเข้า Javax.xml.parsers.documentBuilderFactory; นำเข้า org.w3c.dom.document; นำเข้า org.w3c.dom.element; นำเข้า org.w3c.dom.nodelist; คลาสสาธารณะ domtest1 {โมฆะคงที่สาธารณะหลัก (สตริง [] args) โยนข้อยกเว้น {// ขั้นตอนที่ 1: รับ Dom Parser Factory (ฟังก์ชั่นของงานคือการสร้างตัวแยกวิเคราะห์เฉพาะ) DocumentBuilderFactory DBF = DocumentBuilderFactory // system.out.println ("ชื่อคลาส:" + dbf.getclass (). getName ()); // ขั้นตอนที่ 2: รับ Dom Parser DocumentBuilder db = dbf.newdocumentBuilder (); // system.out.println ("ชื่อคลาส:" + db.getClass (). getName ()); // step3: แยกวิเคราะห์เอกสาร XML และรับเอกสารเอกสาร (รูทโหนด) เอกสารเอกสาร = db.parse (ไฟล์ใหม่ ("candidate.xml")); รายชื่อ nodeList = document.getElementsByTagname ("บุคคล"); สำหรับ (int i = 0; i <list.getLength (); i ++) {องค์ประกอบองค์ประกอบ = (องค์ประกอบ) list.item (i); สตริงเนื้อหา = element.getElementByTagname ("ชื่อ") รายการ (0) .getFirstChild (). getNodeValue (); System.out.println ("ชื่อ:" + เนื้อหา); content = element.getElementsByTagname ("ที่อยู่") รายการ (0) .getFirstChild (). getNodeValue (); System.out.println ("ที่อยู่:" + เนื้อหา); content = element.getElementsByTagname ("tel") รายการ (0) .getFirstChild (). getNodeValue (); System.out.println ("โทรศัพท์:" + เนื้อหา); content = element.getElementsByTagname ("แฟกซ์") รายการ (0) .getFirstChild (). getNodeValue (); System.out.println ("แฟกซ์:" + เนื้อหา); content = element.getElementsByTagname ("อีเมล") รายการ (0) .getFirstChild (). getNodeValue (); System.out.println ("อีเมล:" + เนื้อหา); System.out.println ("-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- นำเข้า Java.io.File; นำเข้า javax.xml.parsers.documentBuilder; นำเข้า Javax.xml.parsers.documentBuilderFactory; นำเข้า org.w3c.dom.attr; นำเข้า org.w3c.dom.comment; นำเข้า org.w3c.dom.document; นำเข้า org.w3c.dom.element; นำเข้า org.w3c.dom.namednodemap; นำเข้า org.w3c.dom.node; นำเข้า org.w3c.dom.nodelist; / ** * ใช้ซ้ำเพื่อแยกวิเคราะห์เอกสาร XML ใด ๆ และส่งออกเนื้อหาไปยังบรรทัดคำสั่ง * @author Zhanglong * */ คลาสสาธารณะ Domtest3 {โมฆะคงที่สาธารณะหลัก (สตริง [] args) โยนข้อยกเว้น DocumentBuilder db = dbf.newdocumentBuilder (); เอกสารเอกสาร = db.parse (ไฟล์ใหม่ ("student.xml")); // รับรูทองค์ประกอบรูทองค์ประกอบรูท = doc.getDocumentElement (); ParseElement (รูท); } private void parselement (องค์ประกอบองค์ประกอบ) {string tagname = element.getNodeName (); Nodelist Children = Element.getChildNodes (); System.out.print ("<" + tagname); // วัตถุ NamedNodeMap ที่ประกอบด้วยแอตทริบิวต์ทั้งหมดขององค์ประกอบองค์ประกอบจะต้องถูกตัดสินใน NamedNodeMap Map = Element.getAtTributes (); // ถ้าองค์ประกอบมีแอตทริบิวต์ถ้า (null! = map) {สำหรับ (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 (">"); สำหรับ (int i = 0; i <children.getLength (); i ++) {node node = children.item (i); // รับประเภทของโหนดสั้น nodetype = node.getNodeType (); if (nodeType == node.element_node) {// เป็นองค์ประกอบให้ดำเนินการต่อเพื่อแยกการแยกวิเคราะห์ซ้ำ ((องค์ประกอบ) โหนด); } else ถ้า (nodeType == node.text_node) {// ออกจาก System.out.out.print ซ้ำ (node.getNodeValue ()); } อื่นถ้า (nodeType == node.comment_node) {system.out.print ("<!-"); ความคิดเห็นความคิดเห็น = (ความคิดเห็น) โหนด; // แสดงความคิดเห็นสตริงเนื้อหาข้อมูล = comment.getData (); System.out.print (ข้อมูล); System.out.print ("->"); }} system.out.print ("</" + tagname + ">"); -SAX: ชื่อเต็มของ SAX เป็น APIs ง่าย ๆ สำหรับ XML ซึ่งเป็นอินเตอร์เฟสโปรแกรมแอปพลิเคชัน XML Simple ซึ่งแตกต่างจาก DOM โหมดการเข้าถึงที่จัดทำโดย SAX เป็นโหมดลำดับซึ่งเป็นวิธีการอ่านและเขียนข้อมูล XML อย่างรวดเร็ว เมื่อมีการวิเคราะห์เอกสาร XML โดยใช้เครื่องวิเคราะห์ SAX ชุดของเหตุการณ์จะถูกเรียกใช้และฟังก์ชั่นการจัดการเหตุการณ์ที่สอดคล้องกันจะถูกเปิดใช้งาน แอปพลิเคชันสามารถเข้าถึงเอกสาร XML ผ่านฟังก์ชั่นการจัดการเหตุการณ์เหล่านี้ ดังนั้นอินเทอร์เฟซ SAX จึงเรียกว่าอินเทอร์เฟซที่ขับเคลื่อนด้วยเหตุการณ์
นำเข้า Java.io.File; นำเข้า javax.xml.parsers.saxparser; นำเข้า javax.xml.parsers.saxparserfactory; นำเข้า org.xml.sax.attributes; นำเข้า org.xml.sax.saxexception; นำเข้า org.xml.sax.helpers.defaulthandler; ระดับสาธารณะ SAXTEST1 {โมฆะสาธารณะคงที่หลัก (สตริง [] args) โยนข้อยกเว้น {// step1: รับอินสแตนซ์ของโรงงาน Sax Parser SaxParserFactory โรงงาน = SaxParserFactory.NewInstance (); // step2: รับอินสแตนซ์ของตัวแยกวิเคราะห์ Sax SaxParser Parser = Factory.newsaxParser (); // step3: เริ่ม parser.parse (ไฟล์ใหม่ ("student.xml"), ใหม่ myhandler ()); }} คลาส MyHandler ขยาย defaulthandler {@Override โมฆะสาธารณะ startDocument () พ่น SaxException {System.out.println ("Parse เริ่ม"); } @Override โมฆะสาธารณะ endDocument () พ่น SaxException {System.out.println ("Parse เสร็จสิ้น"); } @Override โมฆะสาธารณะเริ่มต้น (สตริง uri, สตริง localname, สตริง qname, แอตทริบิวต์แอตทริบิวต์) พ่น saxexception {system.out.println ("เริ่มองค์ประกอบ"); } @Override โมฆะสาธารณะ endelement (สตริง uri, สตริง localname, สตริง qname) พ่น saxexception {system.out.println ("องค์ประกอบเสร็จสิ้น"); - นำเข้า Java.io.File; นำเข้า java.util.stack; นำเข้า javax.xml.parsers.saxparser; นำเข้า javax.xml.parsers.saxparserfactory; นำเข้า org.xml.sax.attributes; นำเข้า org.xml.sax.saxexception; นำเข้า org.xml.sax.helpers.defaulthandler; คลาสสาธารณะ SAXTEST2 {โมฆะคงที่สาธารณะหลัก (สตริง [] args) โยนข้อยกเว้น {SaxParserFactory Factory = SaxParserFactory.NewInstance (); saxparser parser = factory.newsaxparser (); parser.parse (ไฟล์ใหม่ ("student.xml"), ใหม่ myhandler2 ()); }} คลาส MyHandler2 ขยาย defaulthandler {สแต็คส่วนตัว <String> stack = ใหม่สแต็ก <String> (); ชื่อสตริงส่วนตัว; เพศสตริงส่วนตัว อายุสตริงส่วนตัว @Override โมฆะสาธารณะเริ่มต้น (สตริง uri, สตริง localname, สตริง qname, แอตทริบิวต์แอตทริบิวต์) พ่น saxexception {stack.push (qname); สำหรับ (int i = 0; i <attributes.getLength (); i ++) {string attrName = attributes.getQname (i); string attrvalue = attributes.getValue (i); System.out.println (attrName + "=" + attrValue); }} @Override ตัวละครโมฆะสาธารณะ (char [] ch, int start, ความยาว int) พ่น saxexception {String tag = stack.peek (); if ("name" .equals (tag)) {name = new String (ch, start, length); } อื่นถ้า ("เพศ" .equals (แท็ก)) {gender = สตริงใหม่ (ch, start, ความยาว); } อื่นถ้า ("อายุ" .Equals (แท็ก)) {age = สตริงใหม่ (ch, เริ่มต้น, ความยาว); }} @Override โมฆะสาธารณะ endelement (String uri, String localName, string qname) พ่น saxexception {stack.pop (); // ระบุว่าองค์ประกอบได้รับการแยกวิเคราะห์และจำเป็นต้องปรากฏออกมาจากสแต็กถ้า ("นักเรียน" .Equals (qName)) {system.out.println ("ชื่อ:" + ชื่อ); System.out.println ("เพศ:" + เพศ); System.out.println ("อายุ:" + อายุ); System.out.println (); -jdom:
JDOM เป็นโครงการโอเพ่นซอร์สที่ใช้โครงสร้างต้นไม้และใช้เทคโนโลยี Java บริสุทธิ์เพื่อใช้การแยกวิเคราะห์การสร้างการจัดลำดับและการดำเนินงานที่หลากหลายในเอกสาร XML (http://jdom.org)
• JDOM ให้บริการการเขียนโปรแกรม Java โดยตรง มันใช้คุณสมบัติมากมายของภาษา Java ที่ทรงพลังกว่า (วิธีการโอเวอร์โหลดแนวคิดการรวบรวม ฯลฯ ) เพื่อรวมฟังก์ชั่นของ SAX และ DOM ได้อย่างมีประสิทธิภาพ
• JDOM เป็นฟังก์ชั่น API ใหม่ในการอ่านเขียนและใช้งาน XML ในภาษา Java ฟังก์ชั่น API เหล่านี้ได้รับการปรับให้เหมาะสมที่สุดภายใต้หลักฐานของความตรงความเรียบง่ายและประสิทธิภาพ
jdom สร้าง xml
นำเข้า java.io.filewriter; นำเข้า org.jdom.attribute; นำเข้า org.jdom.comment; นำเข้า org.jdom.document; นำเข้า org.jdom.element; นำเข้า org.jdom.output.format; นำเข้า org.jdom.output.xmloutputter; คลาสสาธารณะ JDOMTEST1 {โมฆะคงที่สาธารณะหลัก (สตริง [] args) พ่นข้อยกเว้น {เอกสารเอกสาร = เอกสารใหม่ (); Element root = องค์ประกอบใหม่ ("root"); document.addcontent (root); ความคิดเห็นความคิดเห็น = ความคิดเห็นใหม่ ("นี่คือความคิดเห็นของฉัน"); root.addcontent (ความคิดเห็น); องค์ประกอบ e = องค์ประกอบใหม่ ("สวัสดี"); E.SetAttribute ("sohu", "www.sohu.com"); root.addcontent (e); องค์ประกอบ e2 = องค์ประกอบใหม่ ("โลก"); แอตทริบิวต์ attr = แอตทริบิวต์ใหม่ ("ทดสอบ", "hehe"); e2.setAttribute (attr); E.AddContent (E2); e2.addcontent (องค์ประกอบใหม่ ("AAA") SetAttribute ("A", "B") .setAttribute ("x", "y"). setAttribute ("gg", "hh"). setText ("เนื้อหาข้อความ")); format format = format.getTretTyFormat (); format.setindent (""); // format.setEncoding ("GBK"); XMLOUTPUTTER OUT = ใหม่ XMLOUTPUTTER (รูปแบบ); out.output (เอกสาร, FileWriter ใหม่ ("jdom.xml")); -JDOM แยกวิเคราะห์ xml
นำเข้า Java.io.File; นำเข้า Java.io.FileOutputStream; นำเข้า java.util.list; นำเข้า org.jdom.attribute; นำเข้า org.jdom.document; นำเข้า org.jdom.element; นำเข้า org.jdom.input.saxbuilder; นำเข้า org.jdom.output.format; นำเข้า org.jdom.output.xmloutputter; คลาสสาธารณะ JDOMTEST2 {โมฆะคงที่สาธารณะหลัก (สตริง [] args) โยนข้อยกเว้น {saxbuilder builder = new SaxBuilder (); เอกสารเอกสาร = builder.build (ไฟล์ใหม่ ("jdom.xml")); องค์ประกอบองค์ประกอบ = doc.getRootelement (); System.out.println (element.getName ()); Element Hello = Element.getChild ("Hello"); System.out.println (hello.getText ()); list = hello.getattributes (); สำหรับ (int i = 0; i <list.size (); i ++) {attribute attr = (attribute) list.get (i); string attrName = attr.getName (); String attrvalue = attr.getValue (); System.out.println (attrName + "=" + attrValue); } hello.removechild ("World"); XMLOUTPUTTER OUT = ใหม่ XMLOUTPUTTER (format.GetTpretTyFormat (). setIndent ("")); out.output (doc, ใหม่ fileOutputStream ("jdom2.xml")); -DOM4J
นำเข้า Java.io.FileOutputStream; นำเข้า java.io.filewriter; นำเข้า org.dom4j.document; นำเข้า org.dom4j.documenthelper; นำเข้า org.dom4j.element; นำเข้า org.dom4j.io.OutputFormat; นำเข้า org.dom4j.io.xmlwriter; คลาสสาธารณะ test1 {โมฆะคงที่สาธารณะหลัก (สตริง [] args) โยนข้อยกเว้น {// สร้างเอกสารและตั้งค่าโหนดองค์ประกอบรูทของเอกสาร: วิธีแรก // เอกสารเอกสาร = documentHelper.createDocument (); // // element root = documenthelper.createElement ("นักเรียน"); // // document.setrootelement (root); // สร้างเอกสารและตั้งค่าโหนดองค์ประกอบรูทของเอกสาร: องค์ประกอบวิธีที่สอง root = documentHelper.createElement ("นักเรียน"); เอกสารเอกสาร = DocumentHelper.createDocument (รูท); root.addattribute ("ชื่อ", "Zhangsan"); องค์ประกอบ helloelement = root.addelement ("สวัสดี"); องค์ประกอบ WorldElement = root.addelement ("World"); helloelement.settext ("สวัสดี"); WorldElement.settext ("World"); helloelement.addattribute ("อายุ", "20"); xmlWriter xmlWriter = ใหม่ xmlWriter (); xmlwriter.write (เอกสาร); รูปแบบ outputFormat = new OutputFormat ("", true); XMLWriter XMLWriter2 = ใหม่ XMLWriter (ใหม่ FileOutputStream ("Student2.xml"), รูปแบบ); xmlwriter2.write (เอกสาร); XMLWriter XMLWriter3 = ใหม่ XMLWriter (FileWriter ใหม่ ("student3.xml"), รูปแบบ); xmlwriter3.write (เอกสาร); xmlwriter3.close (); - นำเข้า Java.io.File; นำเข้า java.util.iterator; นำเข้า java.util.list; นำเข้า javax.xml.parsers.documentBuilder; นำเข้า Javax.xml.parsers.documentBuilderFactory; นำเข้า org.dom4j.document; นำเข้า org.dom4j.element; นำเข้า org.dom4j.io.domreader; นำเข้า org.dom4j.io.saxReader; คลาสสาธารณะ test2 {โมฆะคงที่สาธารณะหลัก (สตริง [] args) โยนข้อยกเว้น {saxreader saxreader = new SaxReader (); เอกสารเอกสาร = saxReader.read (ไฟล์ใหม่ ("student2.xml")); Element root = doc.getRootelement (); System.out.println ("องค์ประกอบรูท:" + root.getName ()); list childList = root.elements (); System.out.println (childlist.size ()); แสดงรายการ childList2 = root.elements ("hello"); System.out.println (ChildList2.size ()); องค์ประกอบแรก = root.element ("สวัสดี"); System.out.println (First.attributeValue ("อายุ")); สำหรับ (iterator iter = root.elementiterator (); iter.hasnext ();) {องค์ประกอบ e = (องค์ประกอบ) iter.next (); System.out.println (e.attributeValue ("อายุ")); } system.out.println ("---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- DocumentBuilderfactory.NewInstance (); d.getRootElement (); นำเข้า java.io.filewriter; นำเข้า org.jdom.attribute; นำเข้า org.jdom.document; นำเข้า org.jdom.element; นำเข้า org.jdom.output.format; นำเข้า org.jdom.output.xmloutputter; การทดสอบระดับสาธารณะ 3 {โมฆะคงที่สาธารณะหลัก (สตริง [] args) โยนข้อยกเว้น {เอกสารเอกสาร = เอกสารใหม่ (); Element Root = องค์ประกอบใหม่ ("รายชื่อผู้ติดต่อ") SetAttribute (แอตทริบิวต์ใหม่ ("บริษัท ", "Group A")); document.addcontent (root); Element ContactPerson = องค์ประกอบใหม่ ("ติดต่อ"); root.addcontent (contactperson); contactperson .addcontent (องค์ประกอบใหม่ ("ชื่อ"). setText ("จางซาน")) .addcontent (องค์ประกอบใหม่ ("บริษัท "). settext ("บริษัท ")) .addcontent (องค์ประกอบใหม่ ("tel"). setText ("021-555566666") องค์ประกอบ ("Street"). setText ("5th Street")) .AddContent (องค์ประกอบใหม่ ("เมือง"). setText ("Shanghai"))) XMLOUTPUTTER OUTPUT = ใหม่ XMLOUTPUTTER (format.GetTpretTyFormat () .SetIndent ("). SetEncoding (" GBK "))) Output.Output (เอกสาร, FileWriter ใหม่ (" contact.xml "));}}}