Avatar billede shemeri Praktikant
08. august 2005 - 17:56 Der er 1 løsning

Xalan Pipe

Hej

Jeg 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
Avatar billede shemeri Praktikant
09. august 2005 - 02:19 #1
Lukket! Jeg fandt en løsning :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester