Xalan Pipe
HejJeg har følgene kode til XSLT transformation:
public class XalanPIPE
{
functions func = new functions();
OpzConfig OpzConf = new OpzConfig();
XsltFiles XSLTFiles = new XsltFiles();
File temp;
FileOutputStream f;
XalanPIPE(){
try{
temp = func.CreateTempFile();
}
catch(Exception e){
func.UpdateLogFile(e.toString());
}
}
public File PipeProcessing(int Transformations[], String INPUT, String OUTPUT){
try{
// Instantiate a TransformerFactory.
TransformerFactory tFactory = TransformerFactory.newInstance();
// Determine whether the TransformerFactory supports The use of SAXSource
// and SAXResult
if (tFactory.getFeature(SAXSource.FEATURE) && tFactory.getFeature(SAXResult.FEATURE))
{
// Cast the TransformerFactory to SAXTransformerFactory.
// A TransformerFactory instance can be used to create Transformer and Templates objects.
SAXTransformerFactory saxTFactory = ( (SAXTransformerFactory) tFactory);
TransformerHandler tHandler1 = saxTFactory.newTransformerHandler(new
StreamSource("xslt/1.xslt"));
TransformerHandler tHandler2 = saxTFactory.newTransformerHandler(new
StreamSource("xslt/2.xslt"));
TransformerHandler tHandler3 = saxTFactory.newTransformerHandler(new
StreamSource("xslt/3.xslt"));
tHandler2.getTransformer().setParameter("Pattern", OpzConf.GetAccuracy());
// Create an XMLReader.
XMLReader reader = XMLReaderFactory.createXMLReader();
reader.setContentHandler(tHandler1);
reader.setProperty("http://xml.org/sax/properties/lexical-handler",
tHandler1);
tHandler1.setResult(new SAXResult(tHandler2));
tHandler2.setResult(new SAXResult(tHandler3));
f = new FileOutputStream(temp);
// transformer3 outputs SAX events to the serializer.
Serializer serializer = SerializerFactory.getSerializer
(OutputPropertiesFactory.getDefaultMethodProperties("xml"));
serializer.setOutputStream(f);
tHandler3.setResult(new SAXResult(serializer.asContentHandler()));
// Parse the XML input document. The input ContentHandler and output ContentHandler
// work in separate threads to optimize performance.
reader.parse(INPUT);
f.flush();
f.close();
}
}
catch(TransformerException e){ func.UpdateLogFile(e.toString()); }
catch(SAXException e){ func.UpdateLogFile(e.toString()); }
catch(IOException e){ func.UpdateLogFile(e.toString()); }
catch(Exception e){ func.UpdateLogFile(e.toString()); }
// Return temp file created!
return temp;
}
public void setParameterValue(TransformerHandler handler, String name, Object value) {
handler.getTransformer().setParameter(name, value);
}
}
Denne virker godt nok men problemet er at brugeren vælge mellem 10 transformation'er. De kan vælge 1-10 på en gang ved at kryse.
Jeg har mine transformation'er i en Hashtable hvor de ser sådan ud:
ved et kryse følgene sker: Trans.put("Trans1","true")
ved afkryse, jeg fjerne objeket fra hashtable.
Jeg vil gerne lave denne Pipe tranformation fra denne hashtable hvis muligt eller hvordan kan jeg lave koden om så den tranformation som er valgt kommer i pipen?
Jeg har prøvet meget med at loppe osv...men det hjælpe ikke :-( Håber at nogen kan hjælpe mig med det :-)
tak
