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

Last change on this file since 13270 was 13270, checked in by shaoqun, 17 years ago

replace Category class which is deprecated with Logger class

  • Property svn:keywords set to Author Date Id Revision
File size: 6.6 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
45import org.apache.log4j.*;
46
47/** XMLTransformer - utility class for greenstone
48 *
49 * transforms xml using xslt
50 *
51 * @author <a href="mailto:[email protected]">Katherine Don</a>
52 * @version $Revision: 13270 $
53 */
54public class XMLTransformer {
55
56 static Logger logger = Logger.getLogger(org.greenstone.gsdl3.util.XMLTransformer.class.getName());
57
58 /** The transformer factory we're using */
59 TransformerFactory t_factory=null;
60
61 /**
62 * The no-arguments constructor.
63 *
64 * Any exceptions thrown are caught internally
65 *
66 * @see javax.xml.transform.TransformerFactory
67 */
68 public XMLTransformer() {
69
70 // make sure we are using the xalan transformer
71 System.setProperty("javax.xml.transform.TransformerFactory", "org.apache.xalan.processor.TransformerFactoryImpl");
72 try {
73 this.t_factory = org.apache.xalan.processor.TransformerFactoryImpl.newInstance();
74
75 } catch (Exception e) {
76 logger.error("exception "+e.getMessage());
77 }
78 }
79
80
81
82 /**
83 * Transform an XML document using a XSLT stylesheet
84 *
85 * @param stylesheet a filename for an XSLT stylesheet
86 * @param xml_in the XML to be transformed
87 * @return the transformed XML
88 */
89 public String transform(String stylesheet, String xml_in) {
90
91 try {
92 // Use the TransformerFactory to process the stylesheet Source and generate a Transformer.
93 Transformer transformer = this.t_factory.newTransformer(new StreamSource(stylesheet));
94
95 // Use the Transformer to transform an XML Source and send the output to a Result object.
96 StringWriter output = new StringWriter();
97
98 transformer.transform(new StreamSource(new StringReader(xml_in)), new StreamResult(output));
99 return output.toString();
100 } catch (TransformerConfigurationException e) {
101 logger.error("couldn't create transformer object: "+e.getMessageAndLocation());
102 logger.error(e.getLocationAsString());
103 return "";
104 } catch (TransformerException e) {
105 logger.error("couldn't transform the source: " + e.getMessage());
106 return "";
107 }
108 }
109
110 public String transformToString(Document stylesheet, Document source) {
111 return transformToString(stylesheet, source, null);
112 }
113
114 public String transformToString(Document stylesheet, Document source, HashMap parameters) {
115
116 try {
117 // Use the TransformerFactory to process the stylesheet Source and generate a Transformer.
118 Transformer transformer = this.t_factory.newTransformer(new DOMSource(stylesheet));
119 if (parameters != null) {
120 Set params = parameters.entrySet();
121 Iterator i = params.iterator();
122 while (i.hasNext()) {
123 Map.Entry m = (Map.Entry)i.next();
124 transformer.setParameter((String)m.getKey(), m.getValue());
125 }
126 }
127 //transformer.setParameter("page_lang", source.getDocumentElement().getAttribute(GSXML.LANG_ATT));
128
129
130 // Use the Transformer to transform an XML Source and send the output to a Result object.
131 StringWriter output = new StringWriter();
132
133 transformer.transform(new DOMSource(source), new StreamResult(output));
134 return output.toString();
135 } catch (TransformerConfigurationException e) {
136 logger.error("couldn't create transformer object: "+e.getMessageAndLocation());
137 logger.error(e.getLocationAsString());
138 return "";
139 } catch (TransformerException e) {
140 logger.error("couldn't transform the source: " + e.getMessage());
141 return "";
142 }
143 }
144
145 public Node transform(Document stylesheet, Document source) {
146 return transform(stylesheet, source, null);
147 }
148
149 public Node transform(Document stylesheet, Document source, HashMap parameters) {
150
151 try {
152 // Use the TransformerFactory to process the stylesheet Source and generate a Transformer.
153 Transformer transformer = this.t_factory.newTransformer(new DOMSource(stylesheet));
154 if (parameters != null) {
155 Set params = parameters.entrySet();
156 Iterator i = params.iterator();
157 while (i.hasNext()) {
158 Map.Entry m = (Map.Entry)i.next();
159 transformer.setParameter((String)m.getKey(), m.getValue());
160 }
161 }
162
163 DOMResult result = new DOMResult();
164 transformer.transform(new DOMSource(source), result);
165 return result.getNode().getFirstChild();
166 } catch (TransformerConfigurationException e) {
167 logger.error("couldn't create transformer object: "+e.getMessageAndLocation());
168 logger.error(e.getLocationAsString());
169 return null;
170 } catch (TransformerException e) {
171 logger.error("couldn't transform the source: " + e.getMessage());
172 return null;
173 }
174
175
176 }
177
178 public Node transform(File stylesheet, File source) {
179
180 try {
181 Transformer transformer = this.t_factory.newTransformer(new StreamSource(stylesheet));
182
183 DOMResult result = new DOMResult();
184 transformer.transform(new StreamSource(source), result);
185 return result.getNode().getFirstChild();
186 } catch (TransformerConfigurationException e) {
187 logger.error("couldn't create transformer object: "+e.getMessageAndLocation());
188 logger.error(e.getLocationAsString());
189 return null;
190 } catch (TransformerException e) {
191 logger.error("couldn't transform the source: " + e.getMessage());
192 return null;
193 }
194 }
195}
196
197
Note: See TracBrowser for help on using the repository browser.