package costabs.structures; import java.io.File; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; public class XMLParser { private static final String ERROR_LOADING_FILE = "Xml file not loaded correctly."; /** * This object contains the xml structure as a tree. */ private Document doc; /** * Open and read the structure of a xml file. * @param xmlFile The xml file to parse. */ public XMLParser(String xmlFile) { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance ( ); doc = null; try { DocumentBuilder builder = factory.newDocumentBuilder(); doc = builder.parse( new File(xmlFile) ); } catch (Exception spe) { System.out.println(ERROR_LOADING_FILE); } } public ResultTracker read() { ResultTracker resultMap = new ResultTracker(); // get the list of result elements from the xml tree NodeList childList = doc.getElementsByTagName("elem"); // for each result element, parse it for (int i=0; i< childList.getLength(); i++) { Element result = (Element) childList.item(i); TrackerValue r = loadResult(result); resultMap.addResult(r.getCallName(), r.getHeader(), r.getUb(), r.getTermin(), r.getLine()); } return resultMap; } private TrackerValue loadResult(Element result) { TrackerValue value = new TrackerValue(); NodeList resultNodes = result.getChildNodes(); if (resultNodes == null) return value; for (int i = 0; i < resultNodes.getLength(); i++) { String nodeName = resultNodes.item(i).getNodeName(); if (nodeName.equals("name")) { String header = resultNodes.item(i).getTextContent(); if (header != null) { if (header.contains("/")) { int end = header.indexOf("/"); String name = ""; if (end >= 0) name = header.substring(0,end); if (name!=null) { String nameEscaped = name.replace("'", ""); value.setCallName(nameEscaped); } } else { value.setHeader(header); int end = header.indexOf("("); String name = ""; if (end >= 0) name = header.substring(0,end); if (name!=null) { String nameEscaped = name.replace("'", ""); value.setCallName(nameEscaped); } } } } else if (nodeName.equals("ub")) { String ub = resultNodes.item(i).getTextContent(); if (ub!=null) value.setUb(ub); } else if (nodeName.equals("termin")) { String termin = resultNodes.item(i).getTextContent(); if (termin != null) value.setTermin(termin); } } return value; } }