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 للايدي الغير متحقق )
اتمنى ان يكون السؤال واضح
مع خالص شكري وتقديري لكم جميعا
التعامل مع ملفات xml
اقتباسهي ان انني اريد ان اقارن بين القيم التي في ملف المستخدم مع القيم التي في ملف الشركة كما عملت في الكود الذي في الاعلى لكن اريد من المقارنة ان تعطيني الLHS التي عند المستخدم عندما تكون نتيجة المقارنة غير متطابقة والمستوى كان high للتوضيح (اذا كان المعرف للشركة مطابق للمعرف الخاص بالمستخدم ولكن قيمة RHS غير مساوية للقيمة التي في ال Value وعندما تكون القيمة التي في ال importance هي القيمة high فانني اريد ان ارجع بال LHS للايدي الغير متحقق )
لاحظ الجزء المشار إليه باللون الأزرق
المقارنة تتم إعتماداً على الـ OP والذي قد يكون < , > , = (ربما غيرها ) أي ليست "القيم الغير مساوية لـ Value" كما أشرت في العبارة الثانية المشار إليها باللون الأزرق
هل يمكن إخبارنا ما هي الـ OP المعتمدة ؟
YaSeenTA كتب:لاحظ الجزء المشار إليه باللون الأزرق
المقارنة تتم إعتماداً على الـ OP والذي قد يكون < , > , = (ربما غيرها ) أي ليست "القيم الغير مساوية لـ Value" كما أشرت في العبارة الثانية المشار إليها باللون الأزرق
هل يمكن إخبارنا ما هي الـ OP المعتمدة ؟
الله يجزيك الف خير لاني اتعبتك معي
انا لم اتمكن من صياغة السؤال بشكل صحيح لكن انا اقصد اعتماد ال op الذي تم اعتمادة في لكود سابقا الذي تفضلت به سابقا وهو ان يتم المقارنة بين القيم التي في الRHS مع ال Value بواسطة ال OP
لكن انا اريد ان احدد القواعد الغير متطابقة بين المستخدم والشركة ولها قيمة High عند المستخدم مع مراعة الOP عند المقارنة وانا لم اقصد التساوي ان يكون المعامل = فقط لكن ياخذ بالاعتبار بقية المعاملات الموجودة في ال OP , حيث انني اريد ان احصل من البرنامج على جزئين الجزء الاول قد حصلت علية من الكود السابق وهو عدد كل مستوى من مستويات الاهمية
الجزء الثاني وهو القواعد التي غير متحققة لدى الشركة وهي عند المستخدم ذات مستوى عالي high بحيث يقوم البرنامج بارجاع للمستخدم
ولو بالامكان توضح لي كيف يمكنني المقارنة مع اخذ المعامل الذي في الOP لاني جديد في الجافا ولم اتمكن من فهم ذلك من خلال الكود
مع خالص شكري وتقديري
تم تعديل هذه المشاركة بواسطة abo_mona في 30 سبتمبر 2010 في 00:42
منتضر ردكم ومساعدتكم لي في فهم ال xml مع الجافا
مع خالص شكري وتقديري لكم جميعا
تم تعديل هذه المشاركة بواسطة abo_mona في 7 أكتوبر 2010 في 01:30
إقرأ أي كتاب XML (مثل Apress pro XML for java)