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

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

consistent code style - removed underscore from class variables

  • 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: 5142 $
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 * @return a new transformer
62 * @see javax.xml.transform.TransformerFactory
63 */
64 public XMLTransformer() {
65
66 // make sure we are using the xalan transformer
67 System.setProperty("javax.xml.transform.TransformerFactory", "org.apache.xalan.processor.TransformerFactoryImpl");
68 try {
69 this.t_factory = org.apache.xalan.processor.TransformerFactoryImpl.newInstance();
70
71 } catch (Exception e) {
72 System.err.println("XMLTransformer() exception "+e.getMessage());
73 }
74 }
75
76
77
78 /**
79 * Transform an XML document using a XSLT stylesheet
80 *
81 * @param stylesheet a filename for an XSLT stylesheet
82 * @param xml_in the XML to be transformed
83 * @return the transformed XML
84 */
85 public String transform(String stylesheet, String xml_in) {
86
87 try {
88 // Use the TransformerFactory to process the stylesheet Source and generate a Transformer.
89 Transformer transformer = this.t_factory.newTransformer(new StreamSource(stylesheet));
90
91 // Use the Transformer to transform an XML Source and send the output to a Result object.
92 StringWriter output = new StringWriter();
93
94 transformer.transform(new StreamSource(new StringReader(xml_in)), new StreamResult(output));
95 return output.toString();
96 } catch (TransformerConfigurationException e) {
97 System.err.println("XMLTransformer: couldn't create transformer object: "+e.getMessageAndLocation());
98 System.err.println(e.getLocationAsString());
99 return "";
100 } catch (TransformerException e) {
101 System.err.println("XMLTransformer: couldn't transform the source: " + e.getMessage());
102 return "";
103 }
104 }
105
106 public String transformToString(Document stylesheet, Document source) {
107 return transformToString(stylesheet, source, null);
108 }
109
110 public String transformToString(Document stylesheet, Document source, HashMap parameters) {
111
112 try {
113 // Use the TransformerFactory to process the stylesheet Source and generate a Transformer.
114 Transformer transformer = this.t_factory.newTransformer(new DOMSource(stylesheet));
115 if (parameters != null) {
116 Set params = parameters.entrySet();
117 Iterator i = params.iterator();
118 while (i.hasNext()) {
119 Map.Entry m = (Map.Entry)i.next();
120 transformer.setParameter((String)m.getKey(), m.getValue());
121 }
122 }
123 //transformer.setParameter("page_lang", source.getDocumentElement().getAttribute(GSXML.LANG_ATT));
124
125
126 // Use the Transformer to transform an XML Source and send the output to a Result object.
127 StringWriter output = new StringWriter();
128
129 transformer.transform(new DOMSource(source), new StreamResult(output));
130 return output.toString();
131 } catch (TransformerConfigurationException e) {
132 System.err.println("XMLTransformer: couldn't create transformer object: "+e.getMessageAndLocation());
133 System.err.println(e.getLocationAsString());
134 return "";
135 } catch (TransformerException e) {
136 System.err.println("XMLTransformer: couldn't transform the source: " + e.getMessage());
137 return "";
138 }
139 }
140
141 public Node transform(Document stylesheet, Document source) {
142 return transform(stylesheet, source, null);
143 }
144
145 public Node transform(Document stylesheet, Document source, HashMap parameters) {
146
147 try {
148 // Use the TransformerFactory to process the stylesheet Source and generate a Transformer.
149 Transformer transformer = this.t_factory.newTransformer(new DOMSource(stylesheet));
150 if (parameters != null) {
151 Set params = parameters.entrySet();
152 Iterator i = params.iterator();
153 while (i.hasNext()) {
154 Map.Entry m = (Map.Entry)i.next();
155 transformer.setParameter((String)m.getKey(), m.getValue());
156 }
157 }
158
159 DOMResult result = new DOMResult();
160 transformer.transform(new DOMSource(source), result);
161 return result.getNode().getFirstChild();
162 } catch (TransformerConfigurationException e) {
163 System.err.println("XMLTransformer: couldn't create transformer object: "+e.getMessageAndLocation());
164 System.err.println(e.getLocationAsString());
165 return null;
166 } catch (TransformerException e) {
167 System.err.println("XMLTransformer: couldn't transform the source: " + e.getMessage());
168 return null;
169 }
170
171
172 }
173
174 public Node transform(File stylesheet, File source) {
175
176 try {
177 Transformer transformer = this.t_factory.newTransformer(new StreamSource(stylesheet));
178
179 DOMResult result = new DOMResult();
180 transformer.transform(new StreamSource(source), result);
181 return result.getNode().getFirstChild();
182 } catch (TransformerConfigurationException e) {
183 System.err.println("XMLTransformer: couldn't create transformer object: "+e.getMessageAndLocation());
184 System.err.println(e.getLocationAsString());
185 return null;
186 } catch (TransformerException e) {
187 System.err.println("XMLTransformer: couldn't transform the source: " + e.getMessage());
188 return null;
189 }
190 }
191}
192
193
Note: See TracBrowser for help on using the repository browser.