Mercurial > hg > mpdl-group
view software/mpdl-services/mpiwg-mpdl-xml/src/de/mpg/mpiwg/berlin/mpdl/xml/transform/FragmentTransformer.java @ 23:e845310098ba
diverse Korrekturen
author | Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de> |
---|---|
date | Tue, 27 Nov 2012 12:35:19 +0100 |
parents | dc5e9fcb3fdc |
children |
line wrap: on
line source
package de.mpg.mpiwg.berlin.mpdl.xml.transform; import java.io.IOException; import java.io.StringWriter; import java.net.URL; import javax.xml.transform.stream.StreamSource; import de.mpg.mpiwg.berlin.mpdl.exception.ApplicationException; import net.sf.saxon.s9api.Processor; import net.sf.saxon.s9api.QName; import net.sf.saxon.s9api.SaxonApiException; import net.sf.saxon.s9api.Serializer; import net.sf.saxon.s9api.XdmAtomicValue; import net.sf.saxon.s9api.XdmValue; import net.sf.saxon.s9api.XsltCompiler; import net.sf.saxon.s9api.XsltExecutable; import net.sf.saxon.s9api.XsltTransformer; public class FragmentTransformer { private Processor processor; private XsltCompiler xsltCompiler; private XsltTransformer xsltFragmentTransformer; public FragmentTransformer() throws ApplicationException { init(); } public FragmentTransformer(String xmlFileName) throws ApplicationException { init(); try { StreamSource xmlDoc = new StreamSource(xmlFileName); xsltFragmentTransformer.setSource(xmlDoc); // needs some time for bigger documents } catch (SaxonApiException e) { throw new ApplicationException(e); } } private void init() throws ApplicationException { try { processor = new Processor(false); xsltCompiler = processor.newXsltCompiler(); URL getFragmentXslUrl = FragmentTransformer.class.getResource("getFragment.xsl"); StreamSource xslStreamSource = new StreamSource(getFragmentXslUrl.openStream()); XsltExecutable xsltExecutable = xsltCompiler.compile(xslStreamSource); xsltFragmentTransformer = xsltExecutable.load(); } catch (SaxonApiException e) { throw new ApplicationException(e); } catch (IOException e) { throw new ApplicationException(e); } } public String getFragment(String xmlFileName, String ms1Name, int ms1Pos, String ms2Name, int ms2Pos) throws ApplicationException { String pageFragment = null; try { StreamSource xmlDoc = new StreamSource(xmlFileName); Serializer serializer = new Serializer(); serializer.setOutputWriter(new StringWriter()); serializer.setOutputProperty(Serializer.Property.INDENT, "yes"); xsltFragmentTransformer.setSource(xmlDoc); // needs some time for bigger documents xsltFragmentTransformer.setDestination(serializer); QName ms1NameQName = new QName("ms1Name"); XdmValue ms1NameXdmValue = new XdmAtomicValue(ms1Name); QName ms1PositionQName = new QName("ms1Position"); XdmValue ms1PositionXdmValue = new XdmAtomicValue(ms1Pos); QName ms2NameQName = new QName("ms2Name"); XdmValue ms2NameXdmValue = new XdmAtomicValue(ms2Name); QName ms2PositionQName = new QName("ms2Position"); XdmValue ms2PositionXdmValue = new XdmAtomicValue(ms2Pos); xsltFragmentTransformer.setParameter(ms1NameQName, ms1NameXdmValue); xsltFragmentTransformer.setParameter(ms1PositionQName, ms1PositionXdmValue); xsltFragmentTransformer.setParameter(ms2NameQName, ms2NameXdmValue); xsltFragmentTransformer.setParameter(ms2PositionQName, ms2PositionXdmValue); xsltFragmentTransformer.transform(); // needs some time for bigger documents pageFragment = serializer.getOutputDestination().toString(); } catch (Exception e) { throw new ApplicationException(e); } return pageFragment; } public String getFragment(String ms1Name, int ms1Pos, String ms2Name, int ms2Pos) throws ApplicationException { String pageFragment = null; try { Serializer serializer = new Serializer(); serializer.setOutputWriter(new StringWriter()); serializer.setOutputProperty(Serializer.Property.INDENT, "yes"); xsltFragmentTransformer.setDestination(serializer); QName ms1NameQName = new QName("ms1Name"); XdmValue ms1NameXdmValue = new XdmAtomicValue(ms1Name); QName ms1PositionQName = new QName("ms1Position"); XdmValue ms1PositionXdmValue = new XdmAtomicValue(ms1Pos); QName ms2NameQName = new QName("ms2Name"); XdmValue ms2NameXdmValue = new XdmAtomicValue(ms2Name); QName ms2PositionQName = new QName("ms2Position"); XdmValue ms2PositionXdmValue = new XdmAtomicValue(ms2Pos); xsltFragmentTransformer.setParameter(ms1NameQName, ms1NameXdmValue); xsltFragmentTransformer.setParameter(ms1PositionQName, ms1PositionXdmValue); xsltFragmentTransformer.setParameter(ms2NameQName, ms2NameXdmValue); xsltFragmentTransformer.setParameter(ms2PositionQName, ms2PositionXdmValue); xsltFragmentTransformer.transform(); // needs some time for bigger documents pageFragment = serializer.getOutputDestination().toString(); } catch (Exception e) { throw new ApplicationException(e); } return pageFragment; } }