KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > XmlDoc


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 JavaDoc 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 JavaDoc e) {
22                         e.printStackTrace();
23                 }
24         }
25         public XmlDoc(String JavaDoc xmlDirectory, String JavaDoc stylesheet, String JavaDoc 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 JavaDoc root, String JavaDoc 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 JavaDoc filenames[] = xmlDirectory.list();
38                 for(int i=0; i<filenames.length; i++) {
39                         if(filenames[i].endsWith(".xml") && !filenames[i].startsWith("index")) {
40                                 String JavaDoc 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 JavaDoc[] parse(String JavaDoc xmlfile) {
48                 try {
49                         Document doc=docBuilder.parse(new File(xmlDirectory, xmlfile));
50                         Node root=doc.getDocumentElement();
51                         NodeList nl=root.getChildNodes();
52                         String JavaDoc name=findStringValue(nl,"name");
53                         String JavaDoc symbol=findStringValue(nl,"symbol");
54                         return new String JavaDoc[] {name, symbol};
55                 } catch(IOException e) {
56                         return null;
57                 } catch(SAXException e) {
58                         return null;
59                 }
60         }
61         private static String JavaDoc findStringValue(NodeList nl,String JavaDoc 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 JavaDoc 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 JavaDoc xmlfile) throws TransformerException {
81                 transform(transformer, xmlfile);
82         }
83         private void transform(Transformer transformer, String JavaDoc 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