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

التعامل مع ملفات xml

بدأه abo_mona في 4 سبتمبر 2010 · 29 رد · 1,849 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#26
YaSeenTA كتب:

إن كانت الـ XML schema لملفات الـ XML التي تتعامل معها في برنامجك هي تلك التي وضعتها في أول السؤال فجرب هذا الكود ...

import org.w3c.dom.*;
import javax.xml.xpath.*;
import javax.xml.parsers.*;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;


import org.xml.sax.SAXException;

public class XPathDemo {
	static Map <String,Integer> importanceInfo= new HashMap<String,Integer>();


  public static void main(String[] args){ 

    try {
    	chkImportance("company1.xml","customer.xml");
	System.out.println(importanceInfo.toString());
	} catch (XPathExpressionException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (ParserConfigurationException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (SAXException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
  }

  public static void chkImportance(String companyFile ,String customerFile) throws ParserConfigurationException, SAXException, 
  IOException, XPathExpressionException {

	    DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
	          domFactory.setNamespaceAware(true); 
	    DocumentBuilder builder = domFactory.newDocumentBuilder();
	    Document doc = builder.parse(customerFile);
	    XPath xpath = XPathFactory.newInstance().newXPath();
	    //initialize importanceInfo
	    XPathExpression expr = xpath.compile("//importance/text()");
	    Object result = expr.evaluate(doc, XPathConstants.NODESET);
	    NodeList nodes = (NodeList) result;
	    for(int i=0;i<nodes.getLength();i++)
	    	importanceInfo.put(nodes.item(i).getNodeValue(),0); 

	    doc = builder.parse(companyFile);
	    expr = xpath.compile("//identifier/text()");

	    result = expr.evaluate(doc, XPathConstants.NODESET);
	    nodes = (NodeList) result;
	    int allRules= nodes.getLength();
	    for (int i = 0; i < allRules; i++) {
	    	String nodeID=nodes.item(i).getNodeValue();
			//System.out.print("node id:"+nodeID); 
			expr = xpath.compile("//root[identifier="+nodeID+"]/value/text()");
			result = expr.evaluate(doc, XPathConstants.NODESET);
			NodeList nodes1 = (NodeList) result;
		    nodes1 = (NodeList) result;
		    String nodeValue="";
		    if(nodes1.getLength()!=0){//We don't use for loop since we have only one element as shown in XSD file
		    	 nodeValue=((NodeList)result).item(0).getNodeValue();
		    	 //System.out.print(" value: "+nodeValue);
		    } 	 
			DocumentBuilder builder1 = domFactory.newDocumentBuilder();
			Document doc1 = builder1.parse(customerFile);
			XPath xpath1 = XPathFactory.newInstance().newXPath();
			XPathExpression expr1 = xpath1.compile("//root[.//identifier="+nodeID+"]/condition/RHS/text()");
			Object result1 = expr1.evaluate(doc1, XPathConstants.NODESET);
			nodes1 = (NodeList) result1;
			String RHS="";
			if(nodes1.getLength()!=0){
				RHS=nodes1.item(0).getNodeValue();
				//System.out.print(" RHS: "+RHS);
			}
			else
				continue;
			expr1 = xpath1.compile("//root[.//identifier="+nodeID+"]/condition/OP/text()");
			result1 = expr1.evaluate(doc1, XPathConstants.NODESET);
			nodes1 = (NodeList) result1;
			String OP="";
			if(nodes1.getLength()!=0){
				OP=nodes1.item(0).getNodeValue();
				//System.out.println(" OP: "+OP);	
			}
			expr1 = xpath1.compile("//root[identifier="+nodeID+"]/condition[RHS"+OP+"'"+nodeValue+"'"+"]/RHS/text()");
			result1 = expr1.evaluate(doc1, XPathConstants.NODESET);
			nodes1 = (NodeList) result1;
			if(nodes1.getLength()!=0){
				//check importance				
				expr1 = xpath1.compile("//root[identifier="+nodeID+" and condition[RHS"+OP+"'"+nodeValue+"'"+"]]/importance/text()");
				result1 = expr1.evaluate(doc1, XPathConstants.NODESET);
				nodes1 = (NodeList) result1;
				String impStr=nodes1.item(0).getNodeValue();
				int impValue=importanceInfo.get(impStr);				
				importanceInfo.put(impStr, ++impValue);
				//System.out.println(nodes1.item(0).getNodeValue());
			}		
	    }
  }
}

اخي العزيز لقد استفدت من هذا الكود وحصلت على العدد لكل مستوى حيث انني من احصل على القيم ال high وبقية المستويات

لكن لي طلب لو بالامكان اضافتة او ايضاح كيفية يمكنني عمل ذلك

وهي ان انني اريد ان اقارن بين القيم التي في ملف المستخدم مع القيم التي في ملف الشركة كما عملت في الكود الذي في الاعلى لكن اريد من المقارنة ان تعطيني الLHS التي عند المستخدم عندما تكون نتيجة المقارنة غير متطابقة والمستوى كان high للتوضيح (اذا كان المعرف للشركة مطابق للمعرف الخاص بالمستخدم ولكن قيمة RHS غير مساوية للقيمة التي في ال Value وعندما تكون القيمة التي في ال importance هي القيمة high فانني اريد ان ارجع بال LHS للايدي الغير متحقق )

اتمنى ان يكون السؤال واضح

مع خالص شكري وتقديري لكم جميعا

#27
اقتباس
هي ان انني اريد ان اقارن بين القيم التي في ملف المستخدم مع القيم التي في ملف الشركة كما عملت في الكود الذي في الاعلى لكن اريد من المقارنة ان تعطيني الLHS التي عند المستخدم عندما تكون نتيجة المقارنة غير متطابقة والمستوى كان high للتوضيح (اذا كان المعرف للشركة مطابق للمعرف الخاص بالمستخدم ولكن قيمة RHS غير مساوية للقيمة التي في ال Value وعندما تكون القيمة التي في ال importance هي القيمة high فانني اريد ان ارجع بال LHS للايدي الغير متحقق )

لاحظ الجزء المشار إليه باللون الأزرق

المقارنة تتم إعتماداً على الـ OP والذي قد يكون < , > , = (ربما غيرها ) أي ليست "القيم الغير مساوية لـ Value" كما أشرت في العبارة الثانية المشار إليها باللون الأزرق

هل يمكن إخبارنا ما هي الـ OP المعتمدة ؟

#28
YaSeenTA كتب:

لاحظ الجزء المشار إليه باللون الأزرق

المقارنة تتم إعتماداً على الـ OP والذي قد يكون < , > , = (ربما غيرها ) أي ليست "القيم الغير مساوية لـ Value" كما أشرت في العبارة الثانية المشار إليها باللون الأزرق

هل يمكن إخبارنا ما هي الـ OP المعتمدة ؟

الله يجزيك الف خير لاني اتعبتك معي

انا لم اتمكن من صياغة السؤال بشكل صحيح لكن انا اقصد اعتماد ال op الذي تم اعتمادة في لكود سابقا الذي تفضلت به سابقا وهو ان يتم المقارنة بين القيم التي في الRHS مع ال Value بواسطة ال OP

لكن انا اريد ان احدد القواعد الغير متطابقة بين المستخدم والشركة ولها قيمة High عند المستخدم مع مراعة الOP عند المقارنة وانا لم اقصد التساوي ان يكون المعامل = فقط لكن ياخذ بالاعتبار بقية المعاملات الموجودة في ال OP , حيث انني اريد ان احصل من البرنامج على جزئين الجزء الاول قد حصلت علية من الكود السابق وهو عدد كل مستوى من مستويات الاهمية

الجزء الثاني وهو القواعد التي غير متحققة لدى الشركة وهي عند المستخدم ذات مستوى عالي high بحيث يقوم البرنامج بارجاع للمستخدم

ولو بالامكان توضح لي كيف يمكنني المقارنة مع اخذ المعامل الذي في الOP لاني جديد في الجافا ولم اتمكن من فهم ذلك من خلال الكود

مع خالص شكري وتقديري

تم تعديل هذه المشاركة بواسطة abo_mona في 30 سبتمبر 2010 في 00:42

#29

منتضر ردكم ومساعدتكم لي في فهم ال xml مع الجافا

مع خالص شكري وتقديري لكم جميعا

تم تعديل هذه المشاركة بواسطة abo_mona في 7 أكتوبر 2010 في 01:30

#30

إقرأ أي كتاب XML (مثل Apress pro XML for java)

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