1 import java.io.*; 2 import javax.xml.parsers.*; 3 import javax.xml.transform.*; 4 import javax.xml.transform.stream.*; 5 import org.w3c.dom.*; 6 import org.xml.sax.*; 7 8 public final class XmlDoc { 9 private static final DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); 10 private static final TransformerFactory transFactory = TransformerFactory.newInstance(); 11 private final DocumentBuilder docBuilder; 12 private final Transformer transformer; 13 private final File xmlDirectory; 14 private final File htmlDirectory; 15 16 public static void main(String arg[]) { 17 try { 18 XmlDoc xmldoc = new XmlDoc(arg[0], arg[1], arg[2]); 19 xmldoc.generateIndex(arg[3], arg[4]); 20 xmldoc.transform(); 21 } catch(Exception e) { 22 e.printStackTrace(); 23 } 24 } 25 public XmlDoc(String xmlDirectory, String stylesheet, String outDirectory) throws ParserConfigurationException, TransformerConfigurationException { 26 this.xmlDirectory = new File(xmlDirectory); 27 this.htmlDirectory = new File(outDirectory); 28 docBuilder=docFactory.newDocumentBuilder(); 29 transformer = transFactory.newTransformer(new StreamSource(stylesheet)); 30 } 31 public void generateIndex(String root, String child) throws IOException { 32 File index = new File(xmlDirectory, "index.xml"); 33 PrintWriter writer = new PrintWriter(new FileWriter(index)); 34 writer.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); 35 writer.println("<!-- Auto-generated by "+getClass().getName()+" -->"); 36 writer.println("<"+root+" xmlns:xlink=\"http://www.w3.org/1999/xlink\">"); 37 String filenames[] = xmlDirectory.list(); 38 for(int i=0; i<filenames.length; i++) { 39 if(filenames[i].endsWith(".xml") && !filenames[i].startsWith("index")) { 40 String name[] = parse(filenames[i]); 41 writer.println(" <"+child+" name=\""+name[0]+"\" symbol=\""+name[1]+"\" xlink:href=\""+filenames[i]+"\"/>"); 42 } 43 } 44 writer.println("</"+root+">"); 45 writer.close(); 46 } 47 private String [] parse(String xmlfile) { 48 try { 49 Document doc=docBuilder.parse(new File(xmlDirectory, xmlfile)); 50 Node root=doc.getDocumentElement(); 51 NodeList nl=root.getChildNodes(); 52 String name=findStringValue(nl,"name"); 53 String symbol=findStringValue(nl,"symbol"); 54 return new String [] {name, symbol}; 55 } catch(IOException e) { 56 return null; 57 } catch(SAXException e) { 58 return null; 59 } 60 } 61 private static String findStringValue(NodeList nl,String name) { 62 Node item; 63 for(int i=0;i<nl.getLength();i++) { 64 item=nl.item(i); 65 if(item.getNodeName().equals(name)) 66 return item.getFirstChild().getNodeValue(); 67 } 68 return ""; 69 } 70 public void transform() throws TransformerException { 71 String filenames[] = xmlDirectory.list(); 72 for(int i=0; i<filenames.length; i++) { 73 if(filenames[i].equals("index.xml")) { 74 Transformer indexTransformer = transFactory.newTransformer(new StreamSource(htmlDirectory+"/index.xsl")); 75 transform(indexTransformer, filenames[i]); 76 } else if(filenames[i].endsWith(".xml")) 77 transform(filenames[i]); 78 } 79 } 80 private void transform(String xmlfile) throws TransformerException { 81 transform(transformer, xmlfile); 82 } 83 private void transform(Transformer transformer, String xmlfile) throws TransformerException { 84 StreamSource source = new StreamSource(new File(xmlDirectory, xmlfile)); 85 StreamResult result = new StreamResult(new File(htmlDirectory, xmlfile.substring(0, xmlfile.indexOf('.'))+".html")); 86 transformer.transform(source, result); 87 } 88 } 89 | Popular Tags |