source: trunk/gsdl3/src/java/org/greenstone/gsdl3/util/XMLTransformer.java@ 5663

Last change on this file since 5663 was 5663, checked in by kjdon, 21 years ago

fixed up some bad javadoc

  • Property svn:keywords set to Author Date Id Revision
File size: 6.7 KB
Line 
1/*
2 * XMLTransformer.java
3 * Copyright (C) 2002 New Zealand Digital Library, http://www.nzdl.org
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18 */
19package org.greenstone.gsdl3.util;
20
21// XML classes
22import javax.xml.transform.Transformer;
23import javax.xml.transform.TransformerFactory;
24import javax.xml.transform.TransformerConfigurationException;
25import javax.xml.transform.TransformerException;
26
27import javax.xml.transform.stream.StreamSource;
28import javax.xml.transform.dom.DOMSource;
29import javax.xml.transform.stream.StreamResult;
30import javax.xml.transform.dom.DOMResult;
31
32import org.w3c.dom.Document;
33import org.w3c.dom.Node;
34import org.w3c.dom.NodeList;
35
36// other java classes
37import java.io.StringReader;
38import java.io.StringWriter;
39import java.io.File;
40import java.util.HashMap;
41import java.util.Set;
42import java.util.Map;
43import java.util.Iterator;
44/** XMLTransformer - utility class for greenstone
45 *
46 * transforms xml using xslt
47 *
48 * @author <a href="mailto:[email protected]">Katherine Don</a>
49 * @version $Revision: 5663 $
50 */
51public class XMLTransformer {
52
53 /** The transformer factory we're using */
54 TransformerFactory t_factory=null;
55
56 /**
57 * The no-arguments constructor.
58 *
59 * Any exceptions thrown are caught internally
60 *
61 * @see javax.xml.transform.TransformerFactory
62 */
63 public XMLTransformer() {
64
65 // make sure we are using the xalan transformer
66 System.setProperty("javax.xml.transform.TransformerFactory", "org.apache.xalan.processor.TransformerFactoryImpl");
67 try {
68 this.t_factory = org.apache.xalan.processor.TransformerFactoryImpl.newInstance();
69
70 } catch (Exception e) {
71 System.err.println("XMLTransformer() exception "+e.getMessage());
72 }
73 }
74
75
76
77 /**
78 * Transform an XML document using a XSLT stylesheet
79 *
80 * @param stylesheet a filename for an XSLT stylesheet
81 * @param xml_in the XML to be transformed
82 * @return the transformed XML
83 */
84 public String transform(String stylesheet, String xml_in) {
85
86 try {
87 // Use the TransformerFactory to process the stylesheet Source and generate a Transformer.
88 Transformer transformer = this.t_factory.newTransformer(new StreamSource(stylesheet));
89
90 // Use the Transformer to transform an XML Source and send the output to a Result object.
91 StringWriter output = new StringWriter();
92
93 transformer.transform(new StreamSource(new StringReader(xml_in)), new StreamResult(output));
94 return output.toString();
95 } catch (TransformerConfigurationException e) {
96 System.err.println("XMLTransformer: couldn't create transformer object: "+e.getMessageAndLocation());
97 System.err.println(e.getLocationAsString());
98 return "";
99 } catch (TransformerException e) {
100 System.err.println("XMLTransformer: couldn't transform the source: " + e.getMessage());
101 return "";
102 }
103 }
104
105 public String transformToString(Document stylesheet, Document source) {
106 return transformToString(stylesheet, source, null);
107 }
108
109 public String transformToString(Document stylesheet, Document source, HashMap parameters) {
110
111 try {
112 // Use the TransformerFactory to process the stylesheet Source and generate a Transformer.
113 Transformer transformer = this.t_factory.newTransformer(new DOMSource(stylesheet));
114 if (parameters != null) {
115 Set params = parameters.entrySet();
116 Iterator i = params.iterator();
117 while (i.hasNext()) {
118 Map.Entry m = (Map.Entry)i.next();
119 transformer.setParameter((String)m.getKey(), m.getValue());
120 }
121 }
122 //transformer.setParameter("page_lang", source.getDocumentElement().getAttribute(GSXML.LANG_ATT));
123
124
125 // Use the Transformer to transform an XML Source and send the output to a Result object.
126 StringWriter output = new StringWriter();
127
128 transformer.transform(new DOMSource(source), new StreamResult(output));
129 return output.toString();
130 } catch (TransformerConfigurationException e) {
131 System.err.println("XMLTransformer: couldn't create transformer object: "+e.getMessageAndLocation());
132 System.err.println(e.getLocationAsString());
133 return "";
134 } catch (TransformerException e) {
135 System.err.println("XMLTransformer: couldn't transform the source: " + e.getMessage());
136 return "";
137 }
138 }
139
140 public Node transform(Document stylesheet, Document source) {
141 return transform(stylesheet, source, null);
142 }
143
144 public Node transform(Document stylesheet, Document source, HashMap parameters) {
145
146 try {
147 // Use the TransformerFactory to process the stylesheet Source and generate a Transformer.
148 Transformer transformer = this.t_factory.newTransformer(new DOMSource(stylesheet));
149 if (parameters != null) {
150 Set params = parameters.entrySet();
151 Iterator i = params.iterator();
152 while (i.hasNext()) {
153 Map.Entry m = (Map.Entry)i.next();
154 transformer.setParameter((String)m.getKey(), m.getValue());
155 }
156 }
157
158 DOMResult result = new DOMResult();
159 transformer.transform(new DOMSource(source), result);
160 return result.getNode().getFirstChild();
161 } catch (TransformerConfigurationException e) {
162 System.err.println("XMLTransformer: couldn't create transformer object: "+e.getMessageAndLocation());
163 System.err.println(e.getLocationAsString());
164 return null;
165 } catch (TransformerException e) {
166 System.err.println("XMLTransformer: couldn't transform the source: " + e.getMessage());
167 return null;
168 }
169
170
171 }
172
173 public Node transform(File stylesheet, File source) {
174
175 try {
176 Transformer transformer = this.t_factory.newTransformer(new StreamSource(stylesheet));
177
178 DOMResult result = new DOMResult();
179 transformer.transform(new StreamSource(source), result);
180 return result.getNode().getFirstChild();
181 } catch (TransformerConfigurationException e) {
182 System.err.println("XMLTransformer: couldn't create transformer object: "+e.getMessageAndLocation());
183 System.err.println(e.getLocationAsString());
184 return null;
185 } catch (TransformerException e) {
186 System.err.println("XMLTransformer: couldn't transform the source: " + e.getMessage());
187 return null;
188 }
189 }
190}
191
192
Note: See TracBrowser for help on using the repository browser.