1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
|
/**
* @author barry
*
*/
import java.io.*;
import org.w3c.dom.*;
import javax.xml.parsers.*;
public class ExpMath {
private static double resultat = 0.0f;
private static String expression = "";
/**
* Calcul d'expressions arithmétiques
* contenues dans une feuille xml (exam.xml).
*/
public static double evaluate(Element e, Element rac) {
// TODO Auto-generated constructor stub
double v;
if (e == null){
v = resultat;
resultat = 0.0f;
return v;
}
else if (e.getTagName().equals("op"))
{
expression = expression + " (";
Element child = (Element) e.getFirstChild();
if (child.getTagName().equals("op"))
resultat = evaluate((Element) child.getFirstChild(), rac);
else
resultat = evaluate(child, rac);
}//op
else if (e.getTagName().equals("var"))
{
String varName = e.getAttribute("nom");
double varValeur = 0.0f;
char operateur;
NodeList lesConstantes = rac.getElementsByTagName("const");
for (int j = 0; j < lesConstantes.getLength(); j++)
{
if (((Element) lesConstantes.item(j)).getAttribute("nom").equals(varName))
varValeur = Double.parseDouble(((Element) lesConstantes.item(j)).getAttribute("valeur"));
}
operateur = ((Element) e.getParentNode()).getAttribute("symbole").charAt(0);
expression = expression + varValeur;
if (e.getNextSibling() != null)
e = (Element) e.getNextSibling();
else {
expression += ") ";
e = (Element) e.getParentNode().getNextSibling();
if (e != null) {
operateur = ((Element) e.getParentNode()).getAttribute("symbole").charAt(0);
// Addition
if (operateur == '+')
resultat += evaluate((Element)e.getFirstChild(), rac);
//Soustraction
else if (operateur == '-')
resultat -= evaluate((Element) e.getFirstChild(), rac);
//Multiplication
else if (operateur == '*')
resultat *= evaluate((Element) e.getFirstChild(), rac);
//Division
else if (operateur == '/')
resultat /= evaluate((Element)e.getFirstChild(), rac);
}
}
expression = expression + " " + operateur;
//Addition
if (operateur == '+')
resultat = varValeur + evaluate(e, rac);
//Soustraction
else if (operateur == '-')
resultat = varValeur - evaluate(e, rac);
//Multiplication
else if (operateur == '*')
resultat = varValeur * evaluate(e, rac);
//Division
else if (operateur == '/')
resultat = varValeur / evaluate(e, rac);
}//var
v = resultat;
resultat = 0.0f;
return v;
}
public static String getExpression(){
String exp = expression;
expression = "";
return exp;
}
/**
* @param args
*/
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setCoalescing(false);
dbf.setIgnoringElementContentWhitespace(true);
dbf.setValidating(true);
DocumentBuilder db = dbf.newDocumentBuilder();
Document document = db.parse(new File("/home/barry/Oxygen XML Editor 9/exam.xml"));
// rac est l'élément racine du document.
Element rac = document.getDocumentElement();
NodeList lesExp = rac.getElementsByTagName("exp");
System.out.println("---------------------------------------------------");
for (int i = 0; i < lesExp.getLength(); i++)
{
String n = ((Element) lesExp.item(i)).getAttribute("nom");
Element ex = (Element) lesExp.item(i).getFirstChild();
System.out.println(n + " = " + evaluate(ex, rac) + " = " + getExpression());
System.out.println("---------------------------------------------------");
}
}//Main
}//ExpMath |
Partager