package assignment0226;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class XmlParser {
private File file;
List<Element> actionElements;
public XmlParser(File file) {
this.file = file;
actionElements = new ArrayList<>();
getActionsFromFile();
}
public String getClassNameByActionName(String actionName) {
Element action = getElementByActionName(actionName);
return action.getAttribute("class");
}
public String getResultJsp(String actionName, String resultName) {
Element action = getElementByActionName(actionName);
NodeList results = action.getChildNodes();
for (int i = 0; i < results.getLength(); i++) {
Node child = results.item(i);
if (child instanceof Element) {
Element result = (Element) child;
if (result.getAttribute("name").equals(resultName))
return result.getTextContent();
}
}
throw new RuntimeException("not found result named:" + resultName);
}
private Element getElementByActionName(String actionName) {
for (Element element : actionElements) {
if (element.getAttribute("name").equals(actionName)) {
return element;
}
}
throw new RuntimeException("no such element named " + actionName);
}
private void getActionsFromFile() {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
try {
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(file);
Element root = document.getDocumentElement();
NodeList children = root.getChildNodes();
for (int i = 0; i < children.getLength(); i++) {
Node child = children.item(i);
if (child instanceof Element)
actionElements.add((Element) child);
}
} catch (ParserConfigurationException | SAXException | IOException e) {
e.printStackTrace();
}
}
}