/* * Copyright 2010 InC-Gaming, nBd. All rights reserved. */ package silentium.gameserver.data.xml.parsers; import java.io.File; import java.util.ArrayList; import java.util.List; import javax.xml.parsers.DocumentBuilderFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.w3c.dom.Document; import org.w3c.dom.Node; import silentium.gameserver.templates.StatsSet; /** * @author nBd */ public final class XMLParser { private static Logger _log = LoggerFactory.getLogger(XMLParser.class.getName()); private final File _file; private final ArrayList<StatsSet> _sets; private final String _type; public XMLParser(File file, String type) { _file = file; _type = type; _sets = new ArrayList<>(); } public List<StatsSet> parseDocument() { if (_file == null) { _log.warn("XMLParser: Couldn't find the XML File!"); return null; } parse(); return _sets; } private Document parse() { Document doc; try { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setValidating(false); factory.setIgnoringComments(true); doc = factory.newDocumentBuilder().parse(_file); } catch (Exception e) { _log.error("XMLParser: Error loading file " + _file, e); return null; } try { parseDocument(doc); } catch (Exception e) { _log.error("XMLParser: Error in file " + _file, e); return null; } return doc; } private void parseDocument(Document doc) { for (Node n = doc.getFirstChild(); n != null; n = n.getNextSibling()) { if ("list".equalsIgnoreCase(n.getNodeName())) { for (Node d = n.getFirstChild(); d != null; d = d.getNextSibling()) { if (_type.equalsIgnoreCase(d.getNodeName())) parseItem(d); } } } } private void parseItem(Node n) { StatsSet set = new StatsSet(); try { set.set("id", Integer.parseInt(n.getAttributes().getNamedItem("id").getNodeValue())); } catch (Exception e) { // Empty Catch } Node first = n.getFirstChild(); for (n = first; n != null; n = n.getNextSibling()) { if ("set".equalsIgnoreCase(n.getNodeName())) parseBeanSet(n, set); } _sets.add(set); } private static void parseBeanSet(Node n, StatsSet set) { if (n == null) return; String name = n.getAttributes().getNamedItem("name").getNodeValue().trim(); String value = n.getAttributes().getNamedItem("val").getNodeValue().trim(); set.set(name, value); } }