package edu.vanderbilt.vm.gxjc; import java.io.File; import java.io.FileWriter; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.text.WordUtils; import org.json.JSONWriter; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; public class App { public static void main(String[] args) throws Exception { if (args.length != 2) { System.err.println("Arguments: <xmlfilename> <jsonfilename>"); System.exit(1); } DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document; document = builder.parse(new File(args[0])); document.getDocumentElement().normalize(); NodeList featureList = document.getElementsByTagName("feature"); FileWriter fw = new FileWriter(new File(args[1])); JSONWriter jw = new JSONWriter(fw); jw.array(); // Building IDs started at 11 at the time this program was written int id = 11; for (int i = 0; i < featureList.getLength(); ++i) { Node node = featureList.item(i); if (node.getNodeType() == Node.ELEMENT_NODE) { // Node is an Element Element element = (Element)node; Node coordNode = element.getElementsByTagName("coordinates").item(0); Node typeNode = element.getElementsByTagName("TYPE").item(0); Node nameNode = element.getElementsByTagName("FACILITY_NAME").item(0); Node urlNode = element.getElementsByTagName("FACILITY_URL").item(0); Node remarksNode = element.getElementsByTagName("FACILITY_REMARKS").item(0); jw.object().key("id").value(id++); if (nameNode != null && nameNode.getTextContent().length() != 0) { jw.key("name").value(WordUtils.capitalizeFully(nameNode.getTextContent())); } else { jw.key("name").value(""); } if (typeNode != null && typeNode.getTextContent().length() != 0) { jw.key("category").array().value(WordUtils.capitalizeFully(typeNode.getTextContent())).endArray(); } else { jw.key("category").array().value("").endArray(); } jw.key("hours").value(""); if (remarksNode != null && remarksNode.getTextContent().length() != 0) { jw.key("placeDescription").value(remarksNode.getTextContent()); } else { jw.key("placeDescription").value(""); } if (urlNode != null && urlNode.getTextContent().length() != 0) { jw.key("imagePath").value( "https://www.vanderbilt.edu/map/" + StringUtils.lowerCase(urlNode.getTextContent())); } else { jw.key("imagePath").value(""); } jw.key("videoPath").value(""); if (coordNode != null && coordNode.getTextContent().length() != 0) { String[] vals = coordNode.getTextContent().split(","); Double x = Double.parseDouble(vals[0]); Double y = Double.parseDouble(vals[1]); double[] latlon = EPSG900913ToLatLon(x, y); jw.key("latitude").value(latlon[0]); jw.key("longitude").value(latlon[1]); } else { jw.key("latitude").value(""); jw.key("longitude").value(""); } jw.endObject(); } } jw.endArray(); fw.close(); } public static double[] EPSG900913ToLatLon(double x, double y) { double longitude = x / (6378137.0 * Math.PI / 180); double latitude = ((Math.atan(Math.pow(Math.E, (y / 6378137.0)))) / (Math.PI / 180) - 45) * 2.0; return new double[] {latitude, longitude}; } }