اقرأ ملف xml المحلي وقم بتحليله من خلال DOM. وتتمثل خاصية تحليل DOM في تحميل ملف xml بأكمله في الذاكرة لتشكيل بنية شجرة DOM، كما أن هيكل الشجرة مناسب للاجتياز والمعالجة.
تتمثل خاصية تحليل DOM في قراءة ملف xml وتحويله إلى بنية شجرة dom، واجتياز العقد.
هذا هو مفهوم العقد لدى W3c
إذا كان XML يحتوي على كمية كبيرة من البيانات، فإن DOM غير مناسب لتحليل XML الذي يحتوي على كمية كبيرة من البيانات بسبب خاصية تحميل XML في الذاكرة في وقت واحد. عندما يتم تضمين كمية كبيرة من ملف XML، فإن التحليل باستخدام SAX يحفظ الذاكرة.
فيما يلي مثال لاستخدام DOM لتحليل ملفات xml:
بنية ملف XML هي كما يلي:
<?xml version="1.0" encoding="ISO-8859-1"?><bookstore> <book class="cooking"> <title lang="en">الإيطالية اليومية</title> <author>جيادا دي لورينتيس </author> <year>2005</year> <price>30.00</price> </book> <book class="children"> <title lang="en">هاري بوتر</title> <author>J ك. رولينج </ المؤلف> <year>2005</year> <price>29.99</price> </book> <book class="web"> <title lang="en">XQuery Kick Start</title> <author>جيمس ماكجفرن</ المؤلف> <year>2003</year> <price>49.99</price> </book> <book class="web" Cover="paperback"> <title lang="en">تعلم لغة XML</title> < المؤلف>إريك تي راي</author> <year>2003</year> <price>39.95</price> </book></bookstore>
قم بإنشاء فئة لتحليل XML كما يلي:
حزمة xml.dom;import java.io.File;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import org.w3c.dom.Document;import org.w3c.dom.Element;import org .w3c.dom.Node;import org.w3c.dom.NodeList;فئة عامة ReadXmlFile { public static void main(String[] args) {try{ File xmlFile = new File("src/resource/book.xml"); DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = builderFactory.newDocumentBuilder(); المستند doc = builder.parse(xmlFile); doc.getDocumentElement().normalize(); System.out.println("العنصر الجذر: "+doc.getDocumentElement().getNodeName()); 0 ; i<nList.getLength();i++){ العقدة العقدة = nList.item(i); System.out.println("اسم العقدة:"+node.getNodeName()); Element ele = (Element)node; System.out.println("---------------- ------------"); if(node.getNodeType() == Element.ELEMENT_NODE){ System.out.println("فئة الكتاب: "+ ele.getAttribute("category")) System.out.println("اسم العنوان:"+ ele.getElementsByTagName("title").item(0).getTextContent()); System.out.println("اسم المؤلف: "+ele.getElementsByTagName("author").item(0).getTextContent()); System.out.println("السنة :"+ele.getElementsByTagName("year").item(0).getTextContent()); System.out.println("price : "+ele.getElementsByTagName("price").item(0).getTextContent() ); System.out.println("-----------------------");
نتائج التحليل:
العنصر الجذر: مكتبة اسم العقدة: كتاب -------------------------- فئة الكتاب: الطبخ اسم العنوان: Everyday Italian اسم المؤلف: Giada De Laurentiis السنة: 2005 السعر: 30.00 -------------------------اسم العقدة: كتاب--------------------- -------فئة الكتاب: أطفالاسم العنوان:هاري بوتراسم المؤلف:جيه كيه رولينجالسنة:2005السعر:29.99------------------------ اسم العقدة: كتاب -------------------------- فئة الكتاب: اسم عنوان الويب: XQuery Kick Startauthor الاسم: James McGovernyear:2003السعر: 49.99------------------------اسم العقدة:كتاب------------- --------------- فئة الكتاب: اسم عنوان الويب: تعلم XML اسم المؤلف: Erik T. Rayyear: 2003 السعر: 39.95----------------- --------
ما سبق هو الحصول على القيمة المقابلة من خلال الاسم.
يتم الإخراج التالي باستخدام العقد الحلقية:
رمز وضع إخراج عقدة الحلقة هو كما يلي:
package xml.dom;import java.io.File;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import org.w3c.dom.Document;import org.w3c.dom.NamedNodeMap;import org .w3c.dom.Node;import org.w3c.dom.NodeList; public class ReadXmlFile2 { public static void main(String[] args) {try{ File xmlFile = new File("src/resource/book.xml"); DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance() DocumentBuilder builder = builderFactory.newDocumentBuilder(); Document doc = builder.parse(xmlFile); doc.getDocumentElement().normalize(); System.out.println("العنصر الجذر: "+doc.getDocumentElement().getNodeName()); (doc.getChildNodes()); } }catch(Exception e){ e.printStackTrace(); printNode(NodeListNodeList){ System.out.println("-----------------------"); // System.out.println(nodeList. getLength()); for(int i = 0; i<nodeList.getLength(); i++){ Node العقدة = (Node)nodeList.item(i); System.out.println("اسم العقدة: "+node.getNodeName()); System.out.println("قيمة العقدة: "+node.getTextContent()); if(node.hasAttributes()){ NamedNodeMapNodeMap = العقدة.getAttributes(); for(int j = 0; j < العقدة.getLength(); j++){ العقدة العقدة الجديدة = NodeMap.item(j); System.out.println("اسم العقدة"+nodenew.getNodeName()); System.out.println("قيمة العقدة"+nodenew.getNodeValue()); ()){ printNode(node.getChildNodes());
الإخراج هو كما يلي:
العنصر الجذر: مكتبة ------------------------- اسم العقدة: مكتبة الكتب قيمة العقدة: Everyday Italian Giada De Laurentiis 2005 30.00 Harry Potter J K. Rowling 2005 29.99 XQuery Kick Start James McGovern 2003 49.99 Learning XML Erik T. Ray 2003 39.95 ------------------اسم العقدة: قيمة العقدة: Everyday Italian Giada De Laurentiis 2005 30.00 فئة اسم العقدة، قيمة العقدة، الطبخ ------------------------ اسم العقدة: قيمة عقدة العنوان: اسم العقدة الإيطالية اليومية، قيمة langnode en -------- ------------------ اسم العقدة: قيمة عقدة المؤلف: Giada De Laurentiis ------------------------ - اسم العقدة: قيمة العقدة السنوية: 2005------------------------اسم العقدة: قيمة العقدة السنوية: 30.00----------- - ------------ اسم العقدة: قيمة العقدة الكتابية: Harry Potter J K. Rowling 2005 29.99 فئة اسم العقدة قيمة العقدة الأطفال ------------------------ اسم العقدة: قيمة عقدة العنوان: اسم هاري بوتر قيمة العقدة langnode en --------- ---------------- اسم العقدة: قيمة عقدة المؤلف: J K. Rowling ------------------------- -------- اسم العقدة: قيمة العقدة السنوية: 2005 ------------------------ اسم العقدة: قيمة العقدة السنوية: 29.99 ------- -------- ------------ اسم العقدة: قيمة العقدة الكتابية: XQuery Kick Start James McGovern 2003 49.99 اسم العقدة قيمة فئة عقدة الويب ------------------------- اسم العقدة: قيمة عقدة العنوان: اسم XQuery Kick Startnode قيمة langnode en ----------- --------------- اسم العقدة: قيمة العقدة المؤلف: جيمس ماكغفرن ------------------------- العقدة الاسم: قيمة العقدة السنوية: 2003-------------------------------- اسم العقدة: قيمة العقدة السعرية: 49.99 ----- ----------- -------- اسم العقدة: قيمة العقدة الكتابية: تعلم XML Erik T. Ray 2003 39.95 اسم العقدة فئة العقدة اسم عقدة الويب الغلاف الورقي لقيمة عقدة الغلاف ------------------------- اسم العقدة: قيمة عقدة العنوان: تعلم قيمة اسم XMLnode langnode en ---------- - ------------ اسم العقدة: قيمة عقدة المؤلف: Erik T. Ray -------------------------- اسم العقدة : قيمة العقدة السنوية: 2003 ------------------------ اسم العقدة: قيمة العقدة السعرية: 39.95 -------------- - ----------
أسئلة حول العقد:
<book class="cooking"> <title lang="en">الإيطالية اليومية</title> <author>جيادا دي لورينتيس</author> <year>2005</year> <price>30.00</price> </ كتاب>
بالنسبة لتطبيقات الكتب: يحصل doc.getChildNodes() على NodeList حيث يبلغ طول NodeList 9
العقد الـ 9 هي كما يلي:
عقدة العنوان
عقدة لانج
العقدة اليومية
عقدة المؤلف
عقدة جيادا دي لورينتيس
عقدة السنة
عقدة 2005
عقدة السعر
30.00 عقدة