Original 2.4
[marc4j.git] / src / org / marc4j / samples / StylesheetChainExample.java
1 // $Id: StylesheetChainExample.java,v 1.2 2006/09/23 11:07:26 bpeters Exp $\r
2 package org.marc4j.samples;\r
3 \r
4 import java.io.FileOutputStream;\r
5 import java.io.InputStream;\r
6 import java.io.OutputStream;\r
7 \r
8 import javax.xml.transform.Result;\r
9 import javax.xml.transform.TransformerFactory;\r
10 import javax.xml.transform.sax.SAXResult;\r
11 import javax.xml.transform.sax.SAXSource;\r
12 import javax.xml.transform.sax.SAXTransformerFactory;\r
13 import javax.xml.transform.sax.TransformerHandler;\r
14 import javax.xml.transform.stream.StreamResult;\r
15 import javax.xml.transform.stream.StreamSource;\r
16 \r
17 import org.marc4j.MarcReader;\r
18 import org.marc4j.MarcStreamReader;\r
19 import org.marc4j.MarcWriter;\r
20 import org.marc4j.MarcXmlWriter;\r
21 import org.marc4j.marc.Record;\r
22 \r
23 /**\r
24  * A chain of transformation stages.\r
25  * \r
26  * @author Bas Peters\r
27  * @version $Revision: 1.2 $\r
28  */\r
29 public class StylesheetChainExample {\r
30 \r
31     public static void main(String args[]) throws Exception {\r
32 \r
33         TransformerFactory tFactory = TransformerFactory.newInstance();\r
34 \r
35         if (tFactory.getFeature(SAXSource.FEATURE)\r
36                 && tFactory.getFeature(SAXResult.FEATURE)) {\r
37 \r
38             // cast the transformer handler to a sax transformer handler\r
39             SAXTransformerFactory saxTFactory = ((SAXTransformerFactory) tFactory);\r
40 \r
41             // create a TransformerHandler for each stylesheet.\r
42             TransformerHandler tHandler1 = saxTFactory\r
43                     .newTransformerHandler(new StreamSource(\r
44                             "http://www.loc.gov/standards/mods/v3/MARC21slim2MODS3.xsl"));\r
45             TransformerHandler tHandler2 = saxTFactory\r
46                     .newTransformerHandler(new StreamSource(\r
47                             "http://www.loc.gov/standards/marcxml/xslt/MODS2MARC21slim.xsl"));\r
48             TransformerHandler tHandler3 = saxTFactory\r
49                     .newTransformerHandler(new StreamSource(\r
50                             "http://www.loc.gov/standards/marcxml/xslt/MARC21slim2HTML.xsl"));\r
51 \r
52             // chain the transformer handlers\r
53             tHandler1.setResult(new SAXResult(tHandler2));\r
54             tHandler2.setResult(new SAXResult(tHandler3));\r
55             \r
56             OutputStream out = new FileOutputStream("c:/temp/output.html");\r
57             tHandler3.setResult(new StreamResult(out));\r
58 \r
59             // create a SAXResult with the first handler\r
60             Result result = new SAXResult(tHandler1);\r
61 \r
62             // create the input stream\r
63             InputStream input = ReadMarcExample.class\r
64                     .getResourceAsStream("resources/summerland.mrc");\r
65 \r
66             // parse the input\r
67             MarcReader reader = new MarcStreamReader(input);\r
68             MarcWriter writer = new MarcXmlWriter(result);\r
69             while (reader.hasNext()) {\r
70                 Record record = reader.next();\r
71                 writer.write(record);\r
72             }\r
73             writer.close();\r
74             \r
75             out.close();\r
76         }\r
77     }\r
78 \r
79 }