1 37 package org.webharvest.runtime.processors; 38 39 import java.io.StringReader ; 40 import java.io.StringWriter ; 41 42 import javax.xml.transform.*; 43 import javax.xml.transform.stream.StreamResult ; 44 import javax.xml.transform.stream.StreamSource ; 45 46 import org.webharvest.definition.XsltDef; 47 import org.webharvest.definition.BaseElementDef; 48 import org.webharvest.exception.XsltException; 49 import org.webharvest.runtime.Scraper; 50 import org.webharvest.runtime.ScraperContext; 51 import org.webharvest.runtime.variables.IVariable; 52 import org.webharvest.runtime.variables.NodeVariable; 53 54 57 public class XsltProcessor extends BaseProcessor { 58 59 private XsltDef xsltDef; 60 61 public XsltProcessor(XsltDef xsltDef) { 62 super(xsltDef); 63 this.xsltDef = xsltDef; 64 } 65 66 public IVariable execute(Scraper scraper, ScraperContext context) { 67 BaseElementDef xsltElementDef = xsltDef.getXmlDef(); 68 IVariable xmlStr = getBodyTextContent(xsltElementDef, scraper, context); 69 debug(xsltElementDef, scraper, xmlStr); 70 71 BaseElementDef stylesheetElementDef = xsltDef.getStylesheetDef(); 72 IVariable stylesheetStr = getBodyTextContent(stylesheetElementDef, scraper, context); 73 debug(stylesheetElementDef, scraper, stylesheetStr); 74 75 try { 76 TransformerFactory xformFactory = TransformerFactory.newInstance(); 77 Source xsl = new StreamSource ( new StringReader (stylesheetStr.toString()) ); 78 Transformer stylesheet = xformFactory.newTransformer(xsl); 79 Source request = new StreamSource ( new StringReader (xmlStr.toString()) ); 80 StringWriter writer = new StringWriter (); 81 Result response = new StreamResult (writer); 82 stylesheet.transform(request, response); 83 84 return new NodeVariable(writer.toString()); 85 } catch (TransformerException e) { 86 throw new XsltException("Error during XSLT transforming!", e); 87 } 88 } 89 90 } | Popular Tags |