تعلم الطرق المختلفة لقراءة و إنشاء ملفات XML من خلال تطبيقات الجافا

استعرض الموضوع السابق استعرض الموضوع التالي اذهب الى الأسفل

تعلم الطرق المختلفة لقراءة و إنشاء ملفات XML من خلال تطبيقات الجافا

مُساهمة من طرف أحمد مناع في الإثنين سبتمبر 23, 2013 3:08 pm

بسم الله الرحمن الرحيم
أهلا وسهلا بكم إخوانى الكرام ....درس اليوم عن قراءة و كتابة ملفات لغة الترميز القابلة للامتداد (إكس إم إل) (بالإنجليزية: XML) أختصار للجملة ( The Extensible Markup Language) والتى تستخدم في وصف وتخزين وتنظيم البيانات بخلاف لغة الترميز النصوص التشعبية HTML التي تستخدم لكيفية عرض البيانات على المتصفح.

أولا : نظرة عامة

لغة الترميز الموسعة تستخدم في وصف وتخزين وتنظيم البيانات بخلاف لغة الترميز النصوص التشعبية HTML التي تستخدم لكيفية عرض البيانات على المتصفح. وهي مشتقة من لغة SGML وقواعد لغة XML قريبة من HTML وقد اعتمدها اتحاد شبكة ويب العالمية (W3C) كلغة ترميز قياسية وظهر الجيل المطور منها وهو XML 2

تتكون وثيقة XML من عنصر الجذر rootElement  أو أكثر تحتوى على عنصر أو مجموعة من العناصر elements ، كل عنصر له بداية الوسم، والمحتوى أو اليمة و علامة وسم النهاية....وذلك على النحو التالى :

<?xml version="1.0"?>
<address>
 <name>ahmed </name>
 <street> Test </street>
   <tel> 123 </tel>
</address>

وثيقة XML يبدأ دائما مع prolog الذي يصف ملف XML. هذا prolog يمكن أن يكون الحد الأدنى، على سبيل المثال

<?xml version="1.0"?>
أو يمكن أن تحتوي على معلومات أخرى، مثل الترميز على النحو التالى :

الرمز:
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
_ أنشائنا فى الوثيقة السابقة الجذر <address> و الذى أحتوى على ثلاث عناصر elements هم name و street وtel مع تمرير المحتوى اليهم  


ثانيا :نظرة عامة عن كيفية أستخدام ملفات xml من خلال الجافا

لغة الجافا تحتوي على العديد من الطرق للوصول إلى XML. وفيما يلي لمحة قصيرة من الطرق المتاحة :

_ DOM  ...وهى اختصار للجملة Document Object Model حيث تمكنك من الوصول الى  مستند XML ومن ثم قراءة و كتابة المستند xml وهى من أسهل الطرق استخداما فى الجافا ...وتعتمد تلك الطريقة على تحليل وتوزيع وثيقة XML كاملة وتحميلها في الذاكرة ومن ثم قرائتها لكن من اهم عيوبها أنها بطيئة وتستهلك الكثير من الذاكرة إذا تم تحميل مستند XML  يحتوي على الكثير من البيانات.

_SAX ...وهى أختصار للجملة Simple API for XML وهى تعمل بشكل مختلف عن طريقة DOM ، فإنه لا يتم تحميل أي وثيقة XML في الذاكرة وخلق بعض التمثيل كائن من مستند XML. بدلا من ذلك، استخدام محلل SAX وظيفة رد الاتصال (org.xml.sax.helpers.DefaultHandler) ليبلغ العملاء من هيكل الوثيقة لكن من عيوبها انها تمكنك من قراءة ملفات xml التى بامتداد files. SAX فقط

_Stax وهى أختصار للجملة Streaming API for XML وتمكنك من قراءة و كتابة مستندات xml وتم ادراجها فى الجافا اعتبار من الاصدار 6 و تعتبر متفوقة على SAX وDOM

ثالثا : أستخدام المحلل DOM

1_ قراءة ملفات xml
_ لقراءة ملفات xml بأستخدام المحلل DOM يجب فى البداية أستيراد مكتبات العمل التالية :

الرمز:
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;

import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;

import java.io.FileInputStream;
_ نقوم بإنشاء المحلل DOM وذلك من خلال الفئة DocumentBuilderFactory ثم بعد ذلك يتم أنشاء مثيل جديد من DocumentBuilder و الذى يمثل محلل DOM وذلك على النحو التالى :

الرمز:
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
 DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
_نقوم بتحليل ملف XML إلى شجرة DOM وذلك على النحو التالى :

الرمز:
Document doc = dBuilder.parse(new FileInputStream("data\\text.xml"));
_ نقوم بعد ذلك بالحصول على عناصر الوثيقة على النحو التالى :

1_الحصول على عنصر الجذر rootElement على النحو التالى :

الرمز:
Element rootElement = doc.getDocumentElement();
2_ عنصر الجذر لدية ما يسمى children و التى ربما تكون عناصر Element أو تعليقات comments أو معالج ارشاد إرشادات المعالجة ....الخ و يمكنك الحصول عليها على النحو التالى :

الرمز:
NodeList nodes = element.getChildNodes();
for(int i=0; i<nodes.getLength(); i++){
  Node node = nodes.item(i);
3_ الحصول على سمات العنصر

يمكنك الوصول إلى سمات عنصر عبر وجهة Element . هناك طريقتان للقيام بذلك على النحو التالى :

الرمز:
String attrValue = element.getAttribute("attrName");

Attr attribute = element.getAttributeNode("attrName");

مثال توضيحى كامل .


نفترض أن لديك ملف xml التالى .

<?xml version="1.0"?>
<company>
<staff id="1001">
<firstname>ahmed</firstname>
<lastname>manna</lastname>
<nickname>zakiy</nickname>
<salary>100000</salary>
</staff>
<staff id="2001">
<firstname>low</firstname>
<lastname>yin fong</lastname>
<nickname>fong fong</nickname>
<salary>200000</salary>
</staff>
</company>

_ يتم قرائته باستخدام المحلل DOM XML Parser على النحو التالى :

الرمز:
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import java.io.FileInputStream;

public class Xml {

    
    public static void main(String[] args) {
        
      try {
 

DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
 DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
 Document doc = dBuilder.parse(new FileInputStream("data\\text.xml"));
 

doc.getDocumentElement().normalize();
 
System.out.println("Root element :" + doc.getDocumentElement().getNodeName());
 
NodeList nList = doc.getElementsByTagName("staff");
 
System.out.println("----------------------------");
 
for (int temp = 0; temp < nList.getLength(); temp++) {
 
Node nNode = nList.item(temp);
 
System.out.println("\nCurrent Element :" + nNode.getNodeName());
 
if (nNode.getNodeType() == Node.ELEMENT_NODE) {
 
Element eElement = (Element) nNode;
 
System.out.println("Staff id : " + eElement.getAttribute("id"));
 System.out.println("First Name : " + eElement.getElementsByTagName("firstname").item(0).getTextContent());
 System.out.println("Last Name : " + eElement.getElementsByTagName("lastname").item(0).getTextContent());
 System.out.println("Nick Name : " + eElement.getElementsByTagName("nickname").item(0).getTextContent());
 System.out.println("Salary : " + eElement.getElementsByTagName("salary").item(0).getTextContent());
 
}
 }
    } catch (Exception e) {
 e.printStackTrace();
    }
  }  
        
    }

و النتيجة على النحو التالى :

Current Element :staff
Staff id : 1001
First Name : ahmed
Last Name : manna
Nick Name : zakiy
Salary : 100000

Current Element :staff
Staff id : 2001
First Name : low
Last Name : yin fong
Nick Name : fong fong
Salary : 200000
2_كتابة ملفات xml

يوفر DOM العديد من الفئات في لإنشاء ملف XML بسهولة. أولا، لديك لإنشاء مستند بأستخدام الفئة DocumentBuilder وتحديد كافة محتويات ملف XML مثل عنصر الجذر و العقد و العناصر و السمات ... ثم استخدم فئة Transformer لإخراج محتوى XML بأكمله إلى دفق إخراج،...وذلك على النحو التالى

_ فى البداية نقوم باستيراد المكتبات التالية :

الرمز:
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
 
import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
_ نقوم بانشاء المحلل dom على النحو التالى :

الرمز:
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
        
       Document doc = docBuilder.newDocument();
_ إنشاء عنصر الجذر

الرمز:
Element rootElement = doc.createElement("University");
        doc.appendChild(rootElement);
_ إنشاء اول عنصر وليكن Student على النحو التالى :

الرمز:
Element student = doc.createElement("Student");
        rootElement.appendChild(student);
_ وضع سمات للعنصر Student على النحو التالى :
الرمز:


Attr attr = doc.createAttribute("id");


       attr.setValue("428101010");


       student.setAttributeNode(attr);
_إضافة عناصر فرعية داخل العنصر Student على النحو التالى

الرمز:
Element firstname = doc.createElement("firstname");
        firstname.appendChild(doc.createTextNode("Khaled"));
        student.appendChild(firstname);
  
               Element lastname = doc.createElement("lastname");
        lastname.appendChild(doc.createTextNode("Alqahtani"));
        student.appendChild(lastname);
  
              Element nickname = doc.createElement("email");
        nickname.appendChild(doc.createTextNode("abdulaziz@Gmail.com"));
        student.appendChild(nickname);
_ أخيرا كتابة ملف xml على النحو التالى :

الرمز:
TransformerFactory transformerFactory = TransformerFactory.newInstance();
        Transformer transformer = transformerFactory.newTransformer();
        DOMSource source = new DOMSource(doc);
        StreamResult result = new StreamResult(new File("C:\\Test.xml"));
  
        transformer.transform(source, result);
  
        System.out.println("File Created");


و الشفرة الكاملة لقراة ملف xml باستخدام DOM على النحو التالى :


الرمز:
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
  
public class XMLTest {
  
    public static void main(String argr[]) {
  
      try {
  
        DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
  
        // Create root element...
        Document doc = docBuilder.newDocument();
        Element rootElement = doc.createElement("University");
        doc.appendChild(rootElement);
  
        // Create Student element...
        Element student = doc.createElement("Student");
        rootElement.appendChild(student);
  
        // Add attribute to Student element...
        Attr attr = doc.createAttribute("id");
        attr.setValue("428101010");
        student.setAttributeNode(attr);
  
        // Create firstname element...
        Element firstname = doc.createElement("firstname");
        firstname.appendChild(doc.createTextNode("Khaled"));
        student.appendChild(firstname);
  
        // Create lastname element...
        Element lastname = doc.createElement("lastname");
        lastname.appendChild(doc.createTextNode("Alqahtani"));
        student.appendChild(lastname);
  
        // Create email element...
        Element nickname = doc.createElement("email");
        nickname.appendChild(doc.createTextNode("abdulaziz@Gmail.com"));
        student.appendChild(nickname);
  
        // write to XML file
        TransformerFactory transformerFactory = TransformerFactory.newInstance();
        Transformer transformer = transformerFactory.newTransformer();
        DOMSource source = new DOMSource(doc);
        StreamResult result = new StreamResult(new File("C:\\Test.xml"));
  
        transformer.transform(source, result);
  
        System.out.println("File Created");
  
      } catch (ParserConfigurationException pce) {
        pce.printStackTrace();
      } catch (TransformerException tfe) {
        tfe.printStackTrace();
      }
    }
}
و النتيجة على النحو التالى :

الرمز:
?xml version="1.0" encoding="UTF-8" standalone="no"?>
<University>
    <Student id="428101010">
    <firstname>Khaled</firstname>
    <lastname>Alqahtani</lastname>
    <email>abdulaziz@Gmail.com</email>
    </Student>
</University>
 

_ حساب عدد العناصر فى ملف XML


يمكنك استخدام الشفرة التالية لحساب عدد العناصر فى ملف XML باستخدام المحلل DOM على النحو التالى :

الرمز:
NodeList list = doc.getElementsByTagName("staff");
 System.out.println("Total of elements : " + list.getLength());
غدا تكلمة الدرس مع الطرق الاخرى ...الى اللقاء

ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم

إن فقدت مكان بذورك التي بذرتها يوما ما سيخبرك المطر أين زرعتها ..لذا إبذر الخير فوق أي أرض وتحت أي سماء ومع أي أحد.. فأنت لا تعلم أين تجده ومتى تجده؟! إزرع جميلا ولو في غير موضعه .... فلا يضيع جميلا أينما زرعا .. فما أجمل العطاء... فقد تجد جزاءه في الدنيا أو يكون لك ذخرا في الآخرة

أحمد مناع
.
.

تاريخ التسجيل : 15/02/2011
المساهمات : 809
النقاط : 1478
التقيم : 69
الدولة : مصر
الجنس : ذكر

http://egy-tech.forumegypt.net

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: تعلم الطرق المختلفة لقراءة و إنشاء ملفات XML من خلال تطبيقات الجافا

مُساهمة من طرف زهراء في الثلاثاء ديسمبر 02, 2014 8:16 am


جزاكم الله خيرا اخى احمد

زهراء
........
........

تاريخ التسجيل : 18/02/2011
المساهمات : 262
النقاط : 372
التقيم : 24
الدولة : مصر
الجنس : انثى

الرجوع الى أعلى الصفحة اذهب الى الأسفل

استعرض الموضوع السابق استعرض الموضوع التالي الرجوع الى أعلى الصفحة


 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى