الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

حزمة لتحويل ملف xml الى object

بدأه العيافـي في 20 مارس 2011 · 10 رد · 1,044 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

في عملي اتعامل مع ملفات xml لحفظ بعض القيم و النصوص الثابته.

وبسبب تنوع الملفات اضطريت الى تصميم هذه الحزمة.. حيث لا احتاج الى كتابك شفره خاصة لكل ملف.

فهذه الحزمة يمكنها تحويل ملف xml الى صنف جافا .. المطلوب من مستخدم هذه الحزمة انشاء javabean لملف xml فقط مع اضافة 3 طرق .

مثال على الاستخدام، بفرض ان لديك الملف التالي

<SPs version="1">
	<ControlPanel>
		<sp funcName="CHANGE_PASSWORD" spName="CHANGE_PASSWORD" paramCount="4" desc=""/>
		<sp funcName="MY_INFORMATION" spName="MY_INFORMATION" paramCount="22" desc=""/>
	</ControlPanel>
	<Login>
		<sp funcName="LOGON" spName="LOGON" paramCount="5" desc=""/>
	</Login>
	<Lookup>
		<sp funcName="LK_STATUSES" spName="LK_STATUSES" paramCount="2" desc=""/>
		<sp funcName="LK_TYPES" spName="LK_TYPES" paramCount="2" desc=""/>
	</Lookup>
	<Test>
		<sp funcName="CREATE_NEW_IMAGE" spName="CREATE_NEW_IMAGE" paramCount="5" desc=""/>
		<sp funcName="GET_IMAGE" spName="GET_IMAGE" paramCount="5" desc=""/>
	</Test>
</SPs>

فالكود المناسب لتحويل هذا الملف هو كالتالي

public class MyAtt extends Attribute{

	/*
	 * b.xml
	 */
	private String funcName;
	private String spName;
	private String paramCount;
	private String desc;

	@Override
	public String getItemByAttributeValue(){
		return funcName;
	}
	@Override
	public void setAttribute(String key, String value) throws Exception {
		if("funcName".equalsIgnoreCase(key)){
			this.funcName=value;
		}else if("spName".equalsIgnoreCase(key)){
			this.spName=value;
		}else if("paramCount".equalsIgnoreCase(key)){
			this.paramCount=value;
		}else if("desc".equalsIgnoreCase(key)){
			this.desc=value;
		}
	}
	@Override
	public String toXmlFormat() {
		StringBuffer sb=new StringBuffer();
		if(funcName!=null)sb.append(" funcName=\"").append(funcName).append("\"");
		if(spName!=null)sb.append(" spName=\"").append(spName).append("\"");
		if(paramCount!=null)sb.append(" paramCount=\"").append(paramCount).append("\"");
		if(desc!=null)sb.append(" desc=\"").append(desc).append("\"");
		return sb.toString();
	}
	@Override
	public String toString() {
		return toXmlFormat(); 
	}
}

اما كود القرائة و التحويل فهو كما يلي

public static void test2(){
		try{
			TagsSitting tags=new TagsSitting();
			XMLFileToObject<MyAtt> xmlFileToObject=new XMLFileToObject<MyAtt>(tags, "/test/client/b.xml", new MyAtt(), false);	
			xmlFileToObject.initXMLObject();
			System.out.println(xmlFileToObject.getXmlObject());
			printMap(xmlFileToObject.getXmlObject().toMapByAttribute("sp"));
		}catch(Exception e){
			e.printStackTrace();
		}
	}

الصنف TagsSitting يستخدم فقط اذا اردت اضافة قيود على ملف xml .(سأتكلم عنه لاحقا ).

الحزمة قابله للتطوير .. من لديه اي اقتراح او فكره للتحسين ... يسرني ان يطرحها هنا .

المرفق الحزمة بالشفره المصدريه + ملفات للتجربة

xml2j_0.1.jar

2
#2

حقيقه عمل يبدوا رائعا ... ماشاء الله .. و الكود يبدو متعوب عليه..

لكن أعتقد أن JAXB يقوم بهذه العمليه و هو جزء من JDK1.6 و أيضا ممكن الحصول عليه منفصلا .. (أعتقد أنها يحتاج Xml Schema ليقوم بهذه العمليه)

http://www.javaworld...-0626-jaxb.html

http://www.oracle.co...dex-140168.html

http://bitrazor.com/.../jaxb/index.php

تم تعديل هذه المشاركة بواسطة هويدي في 20 مارس 2011 في 18:26

#3

هل تقوم بعمل شيء بهذه الفئات الناتجة؟

أم تستخدمها في التطوير بعد ذلك

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#4

عزيزي محمد .. اشكرك على التنبيه. سيتم الاصلاح (ان شاء الله تعالى)

عزيزي هويدي .. لا اعرف شي عن JAXB سأقرا عنها . شكرا لك على الروابط ..

#5

شكرا اخي وان شاء الله قريبا سيتم تجربتها وان طرا شيء سوف أسالك

بارك الله بك

إذا نظــرتَ نيـوب اللـّيـثِ بـارزةً         فـلا تظــنَنَ أَنَّ اللـّيـــثَ يبْتسـِـــمُ


 


 


رسم المخططات البيانية بواسطة الجافا


 


كتاب تحليل وتصميم نظم المعلومات


#6

فكرة مميزة جدا

ويوجد أيضا مكتبة JDom أظن أنها فعالة بحيث تتعامل بيها على شكل بنية الشجرية

رابط المكتبة

hhttp://www.jdom.org/

#7
علاء الصالحي كتب:

هل تقوم بعمل شيء بهذه الفئات الناتجة؟

أم تستخدمها في التطوير بعد ذلك

تحياتي

عزيزي علاء

نعم .. فمثلا في المثال test2 المرفق مع الشفره .. هو عبارك عن اسماء SPs الموجود في قاعدة البيانات .. فبدلا من اضافته ك String في الكود .. قمت بكتابتها في ملف xml. ( وهذا لمصلح خاصه بالمشروع )

وعندما ارغب في الوصول الى احدها يمكنني بهذه الشفره

بعد اضافة setter & getter لصنف MyAtt

			HashMap<String, Item<MyAtt>> map=xmlFileToObject.getXmlObject().toMapByAttribute("sp");
			Item<MyAtt> item=map.get("LK_STATUSES");
			System.out.println(item.getName());
			System.out.println(item.getAttributes().getFuncName());
			System.out.println(item.getAttributes().getSpName());
			System.out.println(item.getAttributes().getParamCount());
			System.out.println(item.getAttributes().getDesc());

في مشروعي الحقيقي قمت بانشاء static enum تحتوي على جميع SPs واستخدمها في الشفره الخاصه بالاتصال بقاعدة البيانات.

#8

قصدت هل الموضوع ديناميكي؟

بمعنى تقوم بعمل الفئات وتقوم باستخدامها بدون الحاجة إلى التدخل البشري؟

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#9

عزيزي علاء

المطلوب من مستخدم هذه الحزمة انشاء javabean لملف xml فقط مع اضافة 3 طرق .

#11

هل هناك مثال كامل على الموضوع؟

مع ملف xml حتى أطبقه وأرى الناتج

لم تصلني الفكرة بعد :(

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

مواضيع مشابهة