أصبحت XML الآن تنسيقًا شائعًا لتبادل البيانات. يجلب نظامها المستقل عن النظام الأساسي ، مستقلة عن اللغة ، ومستقلة للنظام راحة كبيرة لتكامل البيانات والتفاعل. بالنسبة لمعرفة بناء الجملة والتفاصيل الفنية لـ XML نفسها ، تحتاج إلى قراءة المستندات الفنية ذات الصلة. تتضمن المحتويات المضمنة هنا DOM (نموذج كائن المستند) ، DTD (تعريف نوع المستند) ، SAX (API البسيط لـ XML) ، XSD (تعريف مخطط XML) ، XSLT (تحويلات لغة الأنماط القابلة للتمديد). للحصول على التفاصيل ، يرجى الرجوع إلى مستند موقع W3C الرسمي http://www.w3.org لمزيد من المعلومات.
طرق تحليل XML هي نفسها بلغات مختلفة ، لكن بناء جملة التنفيذ مختلف. هناك طريقتان للتحليل الأساسيين ، يسمى أحدهما SAX والآخر يسمى DOM. يعتمد SAX على تحليل دفق الأحداث ، ويستند DOM على تحليل بنية شجرة مستندات XML. لنفترض أن محتوى وهيكل XML الخاص بنا هو كما يلي:
<؟
تستخدم هذه المقالة لغة Java لتنفيذ توليد وتوحل وثائق XML من DOM و SAX.
أولاً ، حدد واجهة لتشغيل مستندات XML XMLDOCUMITY التي تحدد الواجهة لإنشاء وتوضيح مستندات XML.
/ ***** Author hongliang.dinghl* حدد الواجهة بين إنشاء مستندات XML وحل محله*/ واجهة عامة XmlDocument {/ *** إنشاء مستند XML* param filename اسم المسار الكامل*/ public void createxml (اسم السلسلة) ؛ / *** PARSE XML Document* param filename file اسم المسار الكامل*/ public void parserxml (اسم ملف السلسلة) ؛ } 1. DOM يولد وتوصل مستندات XML
يحدد مجموعة من الواجهات للنسخة المحسورة من مستند XML. يقرأ المحللون المستند بأكمله ثم يقوم بإنشاء بنية شجرة مقيم الذاكرة ، ويمكن للرمز بعد ذلك استخدام واجهة DOM لتشغيل بنية الشجرة هذه. المزايا: شجرة المستندات بأكملها في الذاكرة ، والتي يسهل تشغيلها ؛ يدعم وظائف مختلفة مثل الحذف والتعديل وإعادة الترتيب ؛ العيوب: يتم نقل المستند بأكمله إلى ذاكرة (بما في ذلك العقد عديمة الفائدة) ، تضيع الوقت والمكان ؛ عند الاستخدام: بمجرد تحليل المستند ، من الضروري الوصول إلى هذه البيانات عدة مرات ؛ موارد الأجهزة الكافية (الذاكرة ، وحدة المعالجة المركزية).
استيراد 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.dom.domsource ؛ استيراد javax.xml.transform.stream.streamResult ؛ استيراد org.w3c.dom.document ؛ استيراد org.w3c.dom.element ؛ استيراد org.w3c.dom.node ؛ استيراد org.w3c.dom.nodelist ؛ استيراد org.xml.sax.saxexception ؛ / ** * * Auuthor Hongliang.dinghl * DOM Generation and Parsing XML Documents */ Public Class Domdemo تنفذ xmldocument {وثيقة خاصة ؛ اسم الملف الخاص بالسلسلة ؛ 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 (اسم ملف السلسلة) {element root = this.document.createelement ("الموظفين") ؛ this.document.appendchild (root) ؛ element efferene = this.document.createElement ("exexeceee") ؛ اسم العنصر = this.document.createElement ("name") ؛ name.appendchild (this.document.createTextNode ("Ding Hongliang")) ؛ الموظف. appendchild (الاسم) ؛ العنصر الجنس = this.document.createElement ("الجنس") ؛ sex.appendchild (this.document.createTextNode ("M")) ؛ الموظف. appendchild (الجنس) ؛ element age = this.document.createElement ("age") ؛ Age.AppendChild (this.document.createTextNode ("30")) ؛ الموظف. appendchild (العمر) ؛ root.appendchild (موظف) ؛ transformerfactory tf = transformerfactory.newinstance () ؛ حاول {transformer transformer = tf.newtransformer () ؛ DomSource Source = New DomSource (document) ؛ Transformer.SetOutputProperty (OutputKeys.encoding ، "GB2312") ؛ transformer.setOutputProperty (outputkeys.indent ، "نعم") ؛ printWriter pw = new printWriter (fileOutputStream جديد (اسم الملف)) ؛ نتيجة البث المباشر = New StreamResult (PW) ؛ transformer.transform (المصدر ، النتيجة) ؛ System.out.println ("إنشاء ملف XML بنجاح!") ؛ } catch (transformerConfigurationException e) {system.out.println (e.getMessage ()) ؛ } catch (alfultalArgumentException 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 () ؛ وثيقة المستند = db.parse (اسم الملف) ؛ الموظفين nodelist = document.getChildNodes () ؛ لـ (int i = 0 ؛ i <amploy.getLength () ؛ i ++) {node amperte = amploy.item (i) ؛ nodeList efferenceInfo = efferene.getChildNodes () ؛ لـ (int j = 0 ؛ j <experiedeeinfo.getLength () ؛ j ++) {node node = exearceeeInfo.item (j) ؛ nodeList evelyeMeta = node.getChildNodes () ؛ لـ (int k = 0 ؛ k <evonyeEmeta.getLength () ؛ k ++) {system.out.println (extripeemeta.item (k) .getnodename () + ": }}} system.out.println ("parsermeta.item (k) .gettextContent () (parserConfiguratione e) {system.out.println (e.getMessage ()) ؛ 2. ساكس يولد وتوصيفات XML مستندات
لحل مشكلة DOM ، يظهر SAX. ساكس ، يحركها الحدث. عندما يكتشف المحلل بداية عنصر ما ، ونهاية عنصر ، وبداية أو نهاية المستند ، وما إلى ذلك ، فإنه يرسل الأحداث ، ويكتب المبرمج رمزًا للرد على هذه الأحداث ويحفظ البيانات. المزايا: لا حاجة لدخول المستند بأكمله مقدمًا ، فهو يستغرق موارد أقل ؛ رمز SAX Parser أصغر من رمز DOM Parser ، مناسب للتطبيق والتنزيل. العيوب: غير ثابت ؛ بعد حدث ما ، إذا لم يتم حفظ البيانات ، فستفقد البيانات ؛ عدم وجود جنسية. يمكن الحصول على النص فقط من الحدث ، لكنه لا يعرف العنصر الذي ينتمي إليه النص ؛ مناسبات الاستخدام: Applet ؛ مطلوب فقط كمية صغيرة من المحتوى من مستند 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 ؛ استيراد org.xml.sax.saxexception ؛ استيراد 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 (اسم ملف السلسلة) {saxparserfactory saxfac = saxparserfactory.newinstance () ؛ حاول {saxparser saxparser = saxfac.newsaxparser () ؛ inputStream هو = جديد fileInputStream (اسم الملف) ؛ 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 يمتد defaulthandler {boolean hasattribute = false ؛ سمات السمات = فارغة ؛ public void startDocument () يلقي saxexception {system.out.println ("بدأت المستند الطباعة") ؛ } public void enddocument () يلقي saxexception {system.out.println ("لقد انتهى المستند الطباعة") ؛ } public void startlement (String uri ، String localName ، Qname QName ، السمات) يرمي SaxException {if (qname.equals ("الموظفين")) {return ؛ } if (qname.equals ("exempleee")) {system.out.println (qname) ؛ } if (attributes.getLength ()> 0) {this.attributes = entributes ؛ this.hasattribute = true ؛ }} public void endelement (String uri ، string localname ، string qname) يلقي saxexception {if (hasattribute && (entributes! = null)) {for (int i = 0 ؛ i <attributes.getLength () ؛ i ++) {system.out.println (attributes.getqname (0)+attribute.getval. }}} أحرف void العامة (char [] ch ، int ، طول int) يلقي saxexception {system.out.println (سلسلة جديدة (ch ، ابدأ ، طول)) ؛ }} package 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 ؛ استيراد org.xml.sax.saxexception ؛ استيراد 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 (اسم ملف السلسلة) {saxparserfactory saxfac = saxparserfactory.newinstance () ؛ حاول {saxparser saxparser = saxfac.newsaxparser () ؛ inputStream هو = جديد fileInputStream (اسم الملف) ؛ 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 يمتد defaulthandler {boolean hasattribute = false ؛ سمات السمات = فارغة ؛ public void startDocument () يلقي saxexception {system.out.println ("بدأت المستند الطباعة") ؛ } public void enddocument () يلقي saxexception {system.out.println ("لقد انتهى المستند الطباعة") ؛ } public void startlement (String uri ، String localName ، Qname QName ، السمات) يرمي SaxException {if (qname.equals ("الموظفين")) {return ؛ } if (qname.equals ("exempleee")) {system.out.println (qname) ؛ } if (attributes.getLength ()> 0) {this.attributes = entributes ؛ this.hasattribute = true ؛ }} public void endelement (String uri ، string localname ، string qname) يلقي saxexception {if (hasattribute && (entributes! = null)) {for (int i = 0 ؛ i <attributes.getLength () ؛ i ++) {system.out.println (attributes.getqname (0)+attribute.getval. }}} أحرف void العامة (char [] ch ، int ، طول int) يلقي saxexception {system.out.println (سلسلة جديدة (ch ، ابدأ ، طول)) ؛ }}3. DOM4J يولد وتوصيف وثائق XML
DOM4J هي واجهة برمجة تطبيقات Java XML ممتازة للغاية ، مع أداء ممتاز ، وظائف قوية وسهلة الاستخدام للغاية ، وهي أيضًا برنامج مفتوح المصدر. في الوقت الحاضر ، يمكنك أن ترى أن المزيد والمزيد من برامج Java تستخدم DOM4J لقراءة وكتابة XML. تجدر الإشارة بشكل خاص إلى أنه حتى Sun's Jaxm تستخدم DOM4J.
استيراد java.io.file ؛ استيراد java.io.filewriter ؛ استيراد java.io.ioException ؛ استيراد java.io.writer ؛ استيراد java.util.iterator ؛ استيراد org.dom4j.document ؛ استيراد org.dom4j.documentException ؛ استيراد org.dom4j.documentHelper ؛ استيراد org.dom4j.element ؛ استيراد org.dom4j.io.saxreader ؛ استيراد org.dom4j.io.xmlWriter ؛ / ** * * * Author hongliang.dinghl * DOM4J إنشاء مستندات XML ومستندات XML PARSE */ CLASS Public DOM4JDEMO تنفذ XMLDOCUMENT {public void createxml (string filename) {document = documentHelper.createdOcument () ؛ element موظفي = document.adDelement ("الموظفين") ؛ element experiede = amploy. اسم العنصر = الموظف. name.settext ("ddvip") ؛ العنصر الجنس = الموظف. sex.settext ("M") ؛ عمر العنصر = الموظف. Age.settext ("29") ؛ حاول {الكاتب filewRiter = new filewriter (اسم الملف) ؛ XMlWriter XMLWriter = New XMLWriter (filewRiter) ؛ xmlWriter.write (وثيقة) ؛ xmlWriter.close () ؛ } catch (ioException e) {system.out.println (e.getMessage ()) ؛ }} public void parserxml (اسم fileName) {file inputXML = ملف جديد (filename) ؛ SaxReader SaxReader = New SaxReader () ؛ حاول {document document = saxreader.read (inputXML) ؛ element موظفي = document.getRootElement () ؛ لـ (iterator i = amploy.elementIrator () ؛ لـ (iterator j = exearcheee.elementIrator () ؛ J.HasNext () ؛) {element node = (element) 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 و Xanan.
استيراد java.io.filenotfoundException ؛ استيراد java.io.fileOutputStream ؛ استيراد java.io.ioException ؛ استيراد java.util.list ؛ استيراد org.jdom.document ؛ استيراد org.jdom.element ؛ استيراد org.jdom.jdomexception ؛ استيراد org.jdom.input.saxbuilder ؛ استيراد org.jdom.output.xmloutputter ؛ / ** * * * Author hongliang.dinghl * jDOM توليد وحالة XML مستندات * */ الفئة العامة JDOMDEMO تنفذ xmldocument {public void createxml (string filename) {document document ؛ جذر العنصر الجذر = عنصر جديد ("الموظفين") ؛ وثيقة = مستند جديد (الجذر) ؛ element exeries = عنصر جديد ("الموظف") ؛ ROOT.ADDCONTENT (الموظف) ؛ اسم العنصر = عنصر جديد ("الاسم") ؛ name.settext ("ddvip") ؛ الموظف. addcontent (الاسم) ؛ عنصر الجنس = عنصر جديد ("الجنس") ؛ sex.settext ("M") ؛ الموظف. addcontent (الجنس) ؛ عمر العنصر = عنصر جديد ("العمر") ؛ Age.settext ("23") ؛ الموظف. addcontent (العمر) ؛ XMlOutputter XMlout = New XMlOutputter () ؛ Try {xmlout.output (وثيقة ، FileOutputStream (Filename)) ؛ } catch (fileNotFoundException e) {e.printStackTrace () ؛ } catch (ioException e) {E.PrintStackTrace () ؛ }} public void parserxml (اسم ملف السلسلة) {saxbuilder builder = new saxbuilder (false) ؛ حاول {document document = builder.build (اسم الملف) ؛ element موظفي = document.getRootElement () ؛ قائمة التوظيف = الموظفين. لـ (int i = 0 ؛ iElement ameasee = (element) eferenceeelist.get (i) ؛ argen effereneInfo = efferene.getChildRen () ؛ for (int j = 0 ؛ jsystem.out.println (((element) emeciversityinfo.get (j)). getName ()+":" element) (jdomexception e) {e.printstacktrace () ؛ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.