تعلم الطرق المختلفة لقراءة و إنشاء ملفات XML من خلال تطبيقات الجافا
منتدى مصر التقني :: قسم لغات البرمجة Programming languages :: لغة الجافا Java :: قواعد البيانات JAVA JDBC
صفحة 1 من اصل 1 • شاطر
تعلم الطرق المختلفة لقراءة و إنشاء ملفات XML من خلال تطبيقات الجافا
بسم الله الرحمن الرحيم
أهلا وسهلا بكم إخوانى الكرام ....درس اليوم عن قراءة و كتابة ملفات لغة الترميز القابلة للامتداد (إكس إم إل) (بالإنجليزية: 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" ?>
ثانيا :نظرة عامة عن كيفية أستخدام ملفات 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;
- الكود:
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
- الكود:
Document doc = dBuilder.parse(new FileInputStream("data\\text.xml"));
1_الحصول على عنصر الجذر rootElement على النحو التالى :
- الكود:
Element rootElement = doc.getDocumentElement();
- الكود:
NodeList nodes = element.getChildNodes();
for(int i=0; i<nodes.getLength(); i++){
Node node = nodes.item(i);
يمكنك الوصول إلى سمات عنصر عبر وجهة 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
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;
- الكود:
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.newDocument();
- الكود:
Element rootElement = doc.createElement("University");
doc.appendChild(rootElement);
- الكود:
Element student = doc.createElement("Student");
rootElement.appendChild(student);
- الكود:
Attr attr = doc.createAttribute("id");
attr.setValue("428101010");
student.setAttributeNode(attr);
- الكود:
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);
- الكود:
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());
ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم
رد: تعلم الطرق المختلفة لقراءة و إنشاء ملفات XML من خلال تطبيقات الجافا
جزاكم الله خيرا اخى احمد
زهراء- ........
- تاريخ التسجيل : 18/02/2011
المساهمات : 438
النقاط : 769
التقيم : 67
الدولة :
الجنس :
| |
منتدى مصر التقني :: قسم لغات البرمجة Programming languages :: لغة الجافا Java :: قواعد البيانات JAVA JDBC
صفحة 1 من اصل 1
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى
الثلاثاء مارس 26, 2024 6:26 pm من طرف moslema_r
» شركة تنظيف استراحات بالرياض
الأحد مارس 24, 2024 10:49 pm من طرف moslema_r
» كشف تسربات المياه في جدة
السبت مارس 23, 2024 7:23 pm من طرف gmalnagy
» خدمات كشف تسربات المياه بخصم 25% - اتصل الان
السبت مارس 23, 2024 7:22 pm من طرف gmalnagy
» شركة تنظيف ثريات بالرياض
الخميس مارس 21, 2024 7:23 pm من طرف moslema_r
» كهربائي منازل بالرياض
الأحد مارس 17, 2024 1:52 pm من طرف رانيا حماد
» افضل شركة نقل عفش بالرياض نقل باكستاني 40% خصم | موقع الانوار
الأحد مارس 17, 2024 1:25 pm من طرف رانيا حماد
» افضل معلم جبس بالرياض تركيب جبس بورد بالرياض 20% خصم اتصل الآن
الأحد مارس 17, 2024 1:09 pm من طرف رانيا حماد
» شراء اثاث مستعمل بالكويت بخصم 30%
الأحد مارس 17, 2024 12:54 pm من طرف رانيا حماد
» افضل فني كهربائي منازل بالرياض جودة 100% | اتصل الآن
الأحد مارس 17, 2024 12:36 pm من طرف رانيا حماد