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

Last change on this file since 13124 was 13124, checked in by shaoqun, 18 years ago

added the code to use log4j and replace system.out or system.err to logger.info or logger.error respectively. The commented out output has been replaced with logger.debug. The log file is in web/logs/greenstone.log

  • 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: 13124 $
53 */
54public class XMLTransformer {
55
56 static Category logger = Category.getInstance(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.