مقدمة DOM4J
عنوان مشروع DOM4J: http://sourceforge.net/projects/dom4j/؟source=directory
DOM4J هي مكتبة مفتوحة المصدر بسيطة للتعامل مع XML و XPATH و XSLT.
يستخدم DOM4J DOM4J بعد تنزيل مشروع DOM4J ، وإلغاء ضغطه وإضافة حزمة JAR الخاصة به (يسمى الإصدار الحالي DOM4J-1.6.1.JAR) إلى مسار الفصل.
(الخصائص-> مسار بناء Java-> إضافة الجرار الخارجية ...).
ثم يمكنك استخدام واجهة برمجة التطبيقات التي توفرها للبرمجة.
مثال البرنامج 1
يستخدم البرنامج الأول رمز Java لإنشاء مستند XML ، والرمز كما يلي:
package com.example.xml.dom4j ؛ import java.io.fileOutputStream ؛ import java.io.filewriter ؛ import org.dom4j.document ؛ import org.dom4j.documenthel per ؛ import org.dom4j.element ؛ import org.dom4. IO .OutputFormat ؛ import org.dom4j.io.xmlWriter ؛/** * Framework DOM4J يتعلم استخدام إطار عمل DOM4J لإنشاء مستند وإخراج XML وحفظه * */الفئة العامة DOM4JTEST1 {Public Static Void Main (Strin G [] args) يلقي الاستثناء {// الطريقة الأولى: إنشاء مستند وإنشاء عنصر الجذر // إنشاء مستند: استخدم مستند فئة مساعد = documentHelper.createdocument () ؛ root = documentHelper.CreateElement ("st udent") ؛ document2 = documentHelp er.createdocument (Root2) ؛ element Worldelement = element.add (World ") ؛ .Writ e (وثيقة) ؛ "stud.xml") ، تنسيق) ؛ Filewriter ("student2.xml")
إخراج وحدة التحكم في البرنامج:
<؟
وثيقة XML التي تم إنشاؤها:
<؟
مثال البرنامج 2
مثال البرنامج 2 ، اقرأ مستند XML وتحليله ، وإخراج محتوياته.
أولاً ، الوثائق التي سيتم تحليلها هي كما يلي:
<؟ ::::::::::::::::::::::::: :::::::::::::::::::::: ::::::::::::::::::::::::: :::::::::::::::::::::: :::::::::::::::::::::::::: /hello> <hello name = "lisi3" "> World Text1 </world> <World Name =" Wangwu2 "> World Text2 </orld> <world> World Te Xt3 </world> </duths> package com.example.xml.dom4j ؛ import java.io. ملف ؛ استيراد java.util.iterator ؛ استيراد java.util.list ؛ استيراد javax.xml.parsers .documentBuilder ؛ استيراد javax. .dom4j.io.domReader ؛ استيراد org.dom4j.io.saxread er ؛/** * التعلم الإطار DOM4J: قراءة و parse xml * */class public dom4jtest2 {public static void main (string [] args) استثناء { SaxReader SaxReader = وثيقة SaxReader جديدة ؛ " + root.getName ()) ؛ // احصل على جميع عناصر الطفل <element> childlist = root.elements () ؛ system. العنصر الطفل في قائمة أسماء محددة <element> childlist2 = "Hello") ؛ عنصر الاسم المحدد FirstWorldElement = Root.element ("World") ؛ attributeValue ("الاسم") ؛ iterator iter = root.elementister () ؛ println ("استخدم DomReader --------------------------------------------- ------------------------------------------------- ------------------------------------------------- ------------------------------------------------- ------------------ DocumentBuilderfactory dbf = documentBuilderfactory.newinstance () ؛ يجب استخدام W3C.DOM. element rootelement = document3.get routeLement () ؛
بعد تشغيل الرمز ، يكون الإخراج هو:
الجذر: عدد الأطفال الطالب: 6Hello الطفل: 3First World ATTR: NAME = WANGWU TERITATION OUTPORT ---------------------------- ------------------------------------------------- ------------------------------------------------- ------------------------------------------------- ------------------------------------ أدير ----- ------- ------------------ جذر: الطلاب
SAX PARSES XML
فيما يلي الخطوات لتنفيذ تحليل الكيان في ساكس
.
SaxparserFactory Factory = saxparserfactory.newinstance () ؛
(2) الخطوة 2: دع فئة المصنع تنشئ فئة Sax Parser Saxparser ، الرمز كما يلي:
saxparser parser = factory.newsaxparser () ؛
(3) الخطوة 3: الحصول على مثيل XmlReader من Saxpsrser ، الرمز كما يلي:
xmlReader reader = parser.getxmlReader () ؛
(4) الخطوة 4: سجل المعالج الذي كتبته في XMLReader.
reader.setContentHandler (this) ؛
(5) الخطوة 5: بعد تحويل مستند أو مورد XML إلى دفق inputstream الذي يمكن لـ Java معالجته ، يبدأ التحليل رسميًا ، والرمز كما يلي:
reader.parse (Inputsource (IS)) ؛
// ما يلي هو استخدام saxparser لتحليل (1) الخطوة الأولى: إنشاء فئة مصنع جديدة saxparserfactory ، الرمز كما يلي:
SaxparserFactory Factory = saxparserfactory.newinstance () ؛
(2) الخطوة 2: دع فئة المصنع تنشئ فئة Sax Parser Saxparser ، الرمز كما يلي:
saxparser parser = factory.newsaxparser () ؛
(3) الخطوة 3: بعد تحويل مستند أو مورد XML إلى دفق inputstream الذي يمكن أن يعالجه Java ، يبدأ التحليل رسميًا ، والرمز كما يلي:
parser.parse (هو ، هذا) ؛
أظن أن كل شخص رأى المحتوى.
// قم بتعيين كائن محدد يمكنه تحديد موقع الموقع الذي يحدث فيه حدث محتوى المستند
public void setDocumentLocator (محدد موقع)
// تستخدم للتعامل مع حدث بدء تحليل المستندات
الفراغ العام startDocument () يلقي saxexception
// معالجة حدث بدء العنصر ، ويمكنك الحصول على اسم URI ، اسم العنصر ، جدول فئة السمات ومعلومات أخرى من مساحة الاسم حيث يوجد العنصر من المعلمات.
startlement public void (سلسلة الأسماء ، السلسلة المحلية ، السلسلة QName ، السمات ATTS) يلقي saxexception
// التعامل مع الحدث النهائي العنصر ، ويمكنك الحصول على اسم URI ، اسم العنصر وغيرها من المعلومات من مساحة الاسم حيث يوجد العنصر من المعلمات.
endelement public void (سلسلة أسماء الأسماء ، السلسلة المحلية ، السلسلة QName) يلقي saxexception
// معالجة محتوى حرف العنصر ، ويمكنك الحصول على المحتوى من المعلمات
أحرف void العامة (char [] ch ، int ، طول int) ترمي saxexception
بالمناسبة ، دعنا نقدم الأساليب في XMLReader.
// تسجيل ومعالجة تحليلات الوثائق XML المحتوى
setContentHandler public void (معالج ContentHandler)
// ابدأ في تحليل مستند XML
تحليل الفراغ العام (المدخلات المدخلات) يرمي saxexception
لقد انتهيت من التحدث تقريبًا.
Package Comample.demo ؛ ) {return _id ؛ () {return _age ؛
بعد ذلك نريد تنفيذ محتوى لتحليل XML
يتطلب تطبيق ContentHandler بشكل عام الخطوات التالية
1. إعلان فئة وراثة الانحراف. Defaulthandler هو فئة أساسية ، والتي تنفذ ببساطة محتوى. نحن فقط بحاجة إلى إعادة كتابة الطريقة في الداخل.
2. إعادة كتابة startDocument () و enddocument () بشكل عام ، يتم وضع التهيئة قبل التحليل الرسمي في startDocument () ، ويتم وضع العمل النهائي في EndDocument ().
3. إعادة كتابة StartElement (). في كثير من الأحيان ، يتم تشغيل بعض البيانات في هذه الوظيفة من خلال الحكم على قيمة الاسم المحلي.
4. أعد كتابة طريقة الأحرف () ، وهي طريقة رد الاتصال. بعد تنفيذ المحلل المحلل ، سيتم تنفيذ هذه الطريقة بعد تحليل محتوى العقدة ، والمعلمة CH [] هي محتوى العقدة.
5. إعادة كتابة طريقة EndElement ( الكتابة على الانفصال و RE-Re-Reple
الطبقة العامة sax_parserxml يمتد defaulthandler { / *** سيتم تشغيل هذا الحدث عند تحليل ملف XML. طريقة Super.StartDocument () ؛ {// todo method method method. ] ch ، int ، طول int) يلقي saxexception {// todo method method tuto super.characters (ch ، start ، length) ؛ Override public void endelement (String uri ، string localname ، Qname) يرمي saxexception {// todo method method tuto super.endelement t (uri ، localname ، QName) ؛
أولاً ، نقوم بإنشاء قائمة لحفظ بيانات الشخص المحسورة
قائمة <Person> الأشخاص ؛
لكن؟ أين تهيئة؟ يمكننا تهيئته في startDocument () ، لأنه سيتم تشغيل هذا الحدث عند تحليل إعلان ملف XML ، لذلك من الأنسب وضعه هنا
/ *** سيتم تشغيل هذا الحدث عند تحليل ملف XML. ) ؛
بعد ذلك ، سنبدأ في التحليل
/ *** سيتم تشغيل هذا الحدث عند تحليل علامة البدء لعنصر**// Override public void startlement (String uri ، string localname ، Qname Qname ، سمات السمات) يرمي saxexception {// todo method method method super super super . attributes.getValue ("id") ؛
في الرمز أعلاه ، يمثل LocalName اسم العنصر المحرر حاليًا
// STEP // 1. ** * يتم تشغيل هذا الحدث عند قراءة عنصر نص. ، ابدأ ، الطول) ؛ يساوي (الاسم ") {// إضافة القيمة المستردة إلى شخص الشخص.
التالي هو ما عليك القيام به عندما تنتهي العلامة
/ *** سيتم تشغيل هذا الحدث عندما تتم قراءة العلامة النهائية**/ Override public void endelement (String uri ، String LocalName ، String QName) يلقي saxexception {// todo gen method method stub super.endelement (uri ، localname ، QNM) ؛ ::::::::::::::::::::::::: :::::::::::::::::::::: ::::::::::: "" ؛
ربما يكون التحليل هو العملية
1. سيتم استدعاء طريقة البدء في بداية عنصر ما.
2. سيتم استدعاء طريقة الأحرف التالية ، والتي يمكن استخدامها للحصول على قيمة العنصر.
3. عندما ينتهي عنصر ، سيتم استدعاء طريقة EndElement بعد الانتهاء من التحليل.
القائمة العامة <Phone> readxml (InportStream) الطريقة الثانية xmlreader = parser.getxmlreader () ؛ عودة الأشخاص
لا يشرح الكود أعلاه.
package.example.demo.Utils ؛ .xml.sax.attributes ؛ يمتد DefaultHandly. Saxparser = Factory.newsaxparser () ؛ (Inportsource (IS)) ؛ يمكنك القيام ببعض أعمال التهيئة* / Override public void startDocument () * * سيتم تشغيل هذا الحدث عند تحليل علامة البدء لعنصر * */ Override public void startlement (String uri ، string localname ، Qname Qname ، سمات السمات) يرمي sa xexception {// todo method method method super. StartElement (uri ، localname ، QName ، recمة) ؛ .getvalue ("id") ؛ يلقي حلقة Saxexc {// todo method method method super.characters (ch ، start ، length) ؛ بدء ، الطول) ؛ "العمر")) {شخص. يلقي Saxexc Episode {// TODO AUTO- الطريقة التي تم إنشاؤها Super.endelement (URI ، LocalName ، QName) ؛ الشخص!
اكتب طريقة للاتصال بهذا الفصل
قائمة <Person> new SAX_PARSERXML (). readxml (IS) ؛ ) .get_age () + "/n") ؛
إذا رأيت وصف الواجهة التالي ، فقد كان التحليل ناجحًا ~
ملخص:
DOM (نموذج كائن الملف) التحليل: يقرأ المحللون المستند بأكمله ، ثم يقوم بإنشاء بنية شجرة مقيمة بالذاكرة ، ويمكن للرمز تشغيل بنية الشجرة هذه وفقًا لواجهة DOM.
المزايا: تتم قراءة المستند بأكمله في الذاكرة ، ومريحة للعمل: يدعم وظائف مختلفة مثل التعديل ، والحذف ، والتكاثر والترتيب.
العيوب: اقرأ المستند بأكمله في الذاكرة ، مع الاحتفاظ بالكثير من العقد غير الضرورية ، وإهدار الذاكرة والمساحة.
استخدم المناسبات: بمجرد قراءة المستند ، يجب تشغيل المستند عدة مرات ، وعندما تكون موارد الأجهزة كافية (الذاكرة ، وحدة المعالجة المركزية).
من أجل حل المشكلات الموجودة في تحليل DOM ، يحدث تحليل SAX. خصائصها هي:
المزايا: لا حاجة لتنفيذ المستند بأكمله ، والذي يستغرق موارد أقل. لا سيما في البيئات المضمنة ، مثل Android ، يوصى بشدة باستخدام تحليل SAX.
العيوب: على عكس تحليل DOM ، فإن البيانات غير ثابتة. إذا لم يتم حفظ البيانات بعد الحدث ، فستفقد البيانات.
استخدم مناسبة: الجهاز لديه قيود الأداء