ملخص عدة طرق لتحليل XML بواسطة Java
النوع الأول: دوم.
الاسم الكامل لـ 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 تتفق مع بنية وثيقة 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 {public static void main (string [] args) يلقي الاستثناء {// الخطوة 1: الحصول على DOM Parser Factory (وظيفة العمل هي إنشاء محلل محلل محدد) documentBuilderfactory dbf = documentBuilderfactory.newinstance () ؛ // system.out.println ("اسم الفئة:" + dbf.getClass (). getName ()) ؛ // الخطوة 2: الحصول على DOM Parser DocumentBuilder DB = DBF.NewDocumentBuilder () ؛ // system.out.println ("اسم الفئة:" + db.getClass (). getName ()) ؛ . Nodelist List = document.getElementSbyTagName ("person") ؛ لـ (int i = 0 ؛ i <list.getLength () ؛ i ++) {element = (element) list.item (i) ؛ content string = element.getElementsByTagName ("name"). البند (0) .getFirstChild (). getNodeValue () ؛ System.out.println ("الاسم:" + content) ؛ content = element.getElementSbyTagName ("address"). البند (0) .getFirstChild (). getNodeValue () ؛ System.out.println ("العنوان:" + المحتوى) ؛ content = element.getElementSbyTagName ("tel"). البند (0) .getFirstChild (). getNodeValue () ؛ System.out.println ("Tel:" + content) ؛ content = element.getElementSbyTagName ("fax"). البند (0) .getFirstChild (). getNodeValue () ؛ system.out.println ("fax:" + content) ؛ 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 * */ class public domtest3 {public static void main (string [] args) rems {documentBuilderfactory dbf = documentBuilderfactory.newinstance () ؛ documentBuilder db = dbf.newdocumentBuilder () ؛ مستند المستند = db.parse (ملف جديد ("student.xml")) ؛ // الحصول على عنصر عقدة العنصر الجذر = doc.getDocumentElement () ؛ التحليل (الجذر) ؛ } parseelement private static void (element element) {String tagName = element.getNodename () ؛ Nodelist الأطفال = element.getChildNodes () ؛ System.out.print ("<" + tagname) ؛ // يجب الحكم على كائن NamedNodeMap المكون من جميع سمات عنصر العنصر على خريطة NamedNodeMap = element.getattributes () ؛ // إذا كان العنصر يحتوي على سمات إذا كان (null! = map) {for (int i = 0 ؛ i <map.getLength () ؛ i ++) {// احصل على كل سمة من سمات العنصر 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 = knids.item (i) ؛ // احصل على نوع العقدة القصيرة nodetype = node.getnodeType () ؛ if (nodeType == node.element_node) {// إنه عنصر ، تابع عقدة الحاجز ((element)) ؛ } آخر if (nodetype == node.text_node) {// exit system.out.print (node.getnodevalue ()) ؛ } آخر إذا (nodetype == node.comment_node) {system.out.print ("<!-") ؛ تعليق التعليق = (تعليق) عقدة ؛ // التعليق بيانات سلسلة المحتوى = comment.getData () ؛ system.out.print (data) ؛ System.out.print ("->") ؛ }} system.out.print ("</" + tagname + ">") ؛ }}SAX: الاسم الكامل لـ SAX هو واجهات برمجة التطبيقات البسيطة لـ XML ، وهي واجهة برنامج تطبيق XML البسيطة. على عكس 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 {public static void main (string [] args) يلقي الاستثناء {// step1: الحصول على مثيل Sax Parser Factory مصنع saxparserfactory = saxparserfactory.newinstance () ؛ // Step2: الحصول على مثيل Sax Parser saxparser parser = factory.newsaxparser () ؛ // Step3: START PARSER.Parse (ملف جديد ("student.xml") ، new myhandler ()) ؛ }} class myHandler يمتد Defaulthandler {Override public void startDocument () يلقي saxexception {system.out.println ("parse chign") ؛ } Override public void enddocument () يلقي saxexception {system.out.println ("parse int") ؛ } Override public void startlement (String uri ، string localName ، Qname ، string ، entributes entributes) يلقي saxexception {system.out.println ("start element") ؛ } Override public void endelement (String uri ، String localName ، String QName) يلقي saxexception {system.out.println ("inting element") ؛ }} استيراد 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 {public static void main (string [] args) يلقي الاستثناء {saxparserfactory factory = saxparserfactory.newinstance () ؛ saxparser parser = factory.newsaxparser () ؛ parser.parse (ملف جديد ("student.xml") ، new myhandler2 ()) ؛ }} class myhandler2 يمتد defaulthandler {private stack <string> stack = new stack <String> () ؛ اسم السلسلة الخاصة ؛ سلسلة جنسية خاصة ؛ سن السلسلة الخاصة ؛ Override public void startlement (String uri ، String localName ، Qname 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 public void أحرف (char [] ch ، int ، طول int) يلقي saxexception {string tag = stack.peek () ؛ if ("name" .equals (tag)) {name = new string (ch ، start ، length) ؛ } آخر if ("الجنس" .equals (علامة)) {Gender = new string (ch ، start ، length) ؛ } آخر if ("Age" .equals (tag)) {Age = new String (ch ، start ، engle) ؛ }} Override public void endelement (String uri ، string localName ، string qname) يلقي saxexception {stack.pop () ؛ // تشير إلى أن العنصر قد تم تحليله ويحتاج إلى الخروج من المكدس إذا ("الطالب" .equals (qname)) {system.out.println ("الاسم:" + name) ؛ System.out.println ("الجنس:" + الجنس) ؛ System.out.println ("العمر:" + العمر) ؛ system.out.println () ؛ }}}جدوم:
JDOM هو مشروع مفتوح المصدر يعتمد على بنية شجرة ويستخدم تقنية Java النقية لتنفيذ التحليل والتوليد والتسلسل والعمليات المختلفة على مستندات XML. (http://jdom.org)
• JDOM يخدم مباشرة برمجة Java. يستخدم العديد من ميزات لغة Java الأكثر قوة (تحميل الأسلوب ، ومفاهيم التجميع ، وما إلى ذلك) للجمع بفعالية بين وظائف SAX و DOM.
• JDOM هي وظيفة API جديدة لقراءة وكتابة وتشغيل XML بلغة Java. يتم تحسين وظائف API هذه إلى أقصى حد بموجب فرضية التوجيه والبساطة والكفاءة.
JDOM CREATE 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 {public static void main (string [] args) يلقي استثناء {document = new document () ؛ العنصر جذر = عنصر جديد ("الجذر") ؛ document.addcontent (الجذر) ؛ تعليق التعليق = تعليق جديد ("هذا هو تعليقاتي") ؛ ROOT.ADDCONTENT (تعليق) ؛ العنصر E = عنصر جديد ("Hello") ؛ E.SetAttribute ("sohu" ، "www.sohu.com") ؛ root.addcontent (e) ؛ العنصر E2 = عنصر جديد ("العالم") ؛ Attribute ATTRITED = سمة جديدة ("اختبار" ، "Hehe") ؛ e2.SetAttribute (attr) ؛ E.AddContent (E2) ؛ e2.addContent (عنصر جديد ("AAA"). setAttribute ("A" ، "B") .SetAttribute ("X" ، "y"). setAttribute ("GG" ، "HH"). setText ("محتوى النص")) ؛ تنسيق التنسيق = format.getPretTyformat () ؛ Format.SetIndent ("") ؛ // format.setEncoding ("GBK") ؛ xmloutputter out = new xmloutputter (format) ؛ Out.output (وثيقة ، FilewRiter جديدة ("jdom.xml")) ؛ }}جدوم تحليل 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 {public static void main (string [] args) يلقي الاستثناء {saxbuilder builder = new saxbuilder () ؛ docum doc = builder.build (ملف جديد ("jdom.xml")) ؛ عنصر العنصر = doc.getRootElement () ؛ System.out.println (element.getName ()) ؛ element hello = element.getChild ("Hello") ؛ System.out.println (hello.getText ()) ؛ قائمة قائمة = 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 = new xmloutputter (format.getPretTyformat (). 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 ؛ فئة Public Class Test1 {public static void main (string [] args) يلقي الاستثناء {// إنشاء مستند وتعيين عقدة عنصر الجذر للوثيقة: الطريقة الأولى // المستند = documentHelper.CreatedOcument () ؛ // // element root = documentHelper.CreateElement ("student") ؛ // // document.setRootElement (root) ؛ // قم بإنشاء مستند وضبط عقدة عنصر الجذر للوثيقة: العنصر الثاني عنصر ROOT = documentHelper.CreateElement ("الطالب") ؛ وثيقة المستند = documentHelper.createdocument (الجذر) ؛ root.addattribute ("name" ، "Zhangsan") ؛ element helloElement = root.adDelement ("Hello") ؛ Element WorldElement = root.addelement ("World") ؛ helloElement.settext ("Hello") ؛ WorldElement.settext ("World") ؛ helloElement.addattribute ("Age" ، "20") ؛ XMlWriter XMLWriter = New XMLWriter () ؛ xmlWriter.write (وثيقة) ؛ تنسيق OutputFormat = New OutputFormat ("" ، صحيح) ؛ XMLWriter XMLWriter2 = New XMLWriter (FileOutputStream جديد ("student2.xml") ، التنسيق) ؛ xmlWriter2.write (وثيقة) ؛ XMlWriter XMLWriter3 = New XMLWriter (FILEWRITER جديد ("student3.xml") ، Format) ؛ 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 {public static void main (string [] args) يرمي الاستثناء {saxreader saxreader = new saxreader () ؛ مستند المستند = saxreader.read (ملف جديد ("student2.xml")) ؛ العنصر جذر = doc.getRootElement () ؛ System.out.println ("عنصر الجذر:" + root.getName ()) ؛ قائمة childlist = root.elements () ؛ System.out.println (childlist.size ()) ؛ قائمة childlist2 = root.elements ("Hello") ؛ System.out.println (childlist2.size ()) ؛ العنصر أولاً = root.element ("Hello") ؛ System.out.println (first.attributeValue ("Age")) ؛ لـ (iterator iter = root.elementIrator () ؛ iter.hasnext () ؛) {element e = (element) iter.next () ؛ System.out.println (E.AttributeValue ("Age")) ؛ } System.out.println ("--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- DocumentBuilderfactory.newinstance () ؛ rootelement = d.getRootElement () ؛ استيراد java.io.filewriter ؛ استيراد org.jdom.attribute ؛ استيراد org.jdom.document ؛ استيراد org.jdom.element ؛ استيراد org.jdom.output.format ؛ استيراد org.jdom.output.xmloutputter ؛ فئة عامة Test3 {public static void main (string [] args) يلقي استثناء {document document = new document () ؛ element root = element ("قائمة جهات الاتصال"). setAttribute (سمة جديدة ("الشركة" ، "المجموعة أ")) ؛ document.addcontent (الجذر) ؛ Element ContactPerson = عنصر جديد ("Contact") ؛ ROOT.ADDCONTENT (contactPerson) ؛ ContactPerson .addContent (عنصر جديد ("الاسم"). setText ("Zhang San")) .AddContent (عنصر جديد ("الشركة"). Element ("Street"). SetText ("5th Street")) .AddContent (عنصر جديد ("City"). إخراج XmlOutputter = جديد XMloutputter (format.getPretTyformat () .SetIndent (").