📄 gnometransformer.java
字号:
// -- transform -- /** * Transforms the given source and writes the result to the * given target. */ public void transform (Source source, Result result) throws TransformerException { if (source instanceof StreamSource) { try { StreamSource ss = (StreamSource) source; NamedInputStream in = XMLJ.getInputStream (ss); String publicId = ss.getPublicId (); String systemId = ss.getSystemId (); String base = XMLJ.getBaseURI (systemId); byte[] detectBuffer = in.getDetectBuffer (); if (detectBuffer == null) { throw new TransformerException ("No document element"); } if (result instanceof StreamResult) { OutputStream out = XMLJ.getOutputStream ((StreamResult) result); transformStreamToStream (in, detectBuffer, publicId, systemId, base, (resolver != null), (errorListener != null), out); } else if (result instanceof DOMResult) { DOMResult dr = (DOMResult) result; GnomeDocument ret = transformStreamToDoc (in, detectBuffer, publicId, systemId, base, (resolver != null), (errorListener != null)); dr.setNode (ret); dr.setSystemId (null); } else if (result instanceof SAXResult) { SAXResult sr = (SAXResult) result; transformStreamToSAX (in, detectBuffer, publicId, systemId, base, (resolver != null), (errorListener != null), getSAXContext (sr)); } else { String msg = "Result type not supported (" + result + ")"; throw new TransformerConfigurationException (msg); } } catch (IOException e) { throw new TransformerException (e); } } else if (source instanceof DOMSource) { DOMSource ds = (DOMSource) source; Node node = ds.getNode (); if (!(node instanceof GnomeDocument)) { String msg = "Node is not a GnomeDocument (" + node + ")"; throw new TransformerException (msg); } GnomeDocument doc = (GnomeDocument) node; if (result instanceof StreamResult) { try { OutputStream out = XMLJ.getOutputStream ((StreamResult) result); transformDocToStream (doc, out); } catch (IOException e) { throw new TransformerException (e); } } else if (result instanceof DOMResult) { DOMResult dr = (DOMResult) result; GnomeDocument ret = transformDocToDoc (doc); dr.setNode (ret); dr.setSystemId (null); } else if (result instanceof SAXResult) { SAXResult sr = (SAXResult) result; transformDocToSAX (doc, getSAXContext (sr)); } else { String msg = "Result type not supported"; throw new TransformerConfigurationException (msg); } } else { String msg = "Source type not supported"; throw new TransformerConfigurationException (msg); } } private GnomeXMLReader getSAXContext (SAXResult result) { GnomeXMLReader ctx = new GnomeXMLReader (); ctx.setContentHandler (result.getHandler ()); ctx.setLexicalHandler (result.getLexicalHandler ()); if (errorListener != null) { ErrorHandler errorHandler = new ErrorListenerErrorHandler (errorListener); ctx.setErrorHandler (errorHandler); } if (resolver != null) { EntityResolver entityResolver = new URIResolverEntityResolver (resolver); ctx.setEntityResolver (entityResolver); } return ctx; } private native void transformStreamToStream (InputStream in, byte[] detectBuffer, String publicId, String systemId, String base, boolean entityResolver, boolean errorHandler, OutputStream out) throws TransformerException; private native GnomeDocument transformStreamToDoc (InputStream in, byte[] detectBuffer, String publicId, String systemId, String base, boolean entityResolver, boolean errorHandler) throws TransformerException; private native void transformStreamToSAX (InputStream in, byte[] detectBuffer, String publicId, String systemId, String base, boolean entityResolver, boolean errorHandler, GnomeXMLReader out) throws TransformerException; private native void transformDocToStream (GnomeDocument in, OutputStream out) throws TransformerException; private native GnomeDocument transformDocToDoc (GnomeDocument in) throws TransformerException; private native void transformDocToSAX (GnomeDocument in, GnomeXMLReader out) throws TransformerException; /* * Retrieve parameters as a string array. * This is a convenience method called from native code. */ private String[] getParameterArray () { String[] parameterArray = new String[parameters.size () * 2]; int index = 0; for (Iterator it = parameters.keySet ().iterator (); it.hasNext (); ++index) { String parameterKey = (String) it.next (); String parameterValue = (String) parameters.get (parameterKey); parameterArray[index * 2 + 0] = parameterKey; parameterArray[index * 2 + 1] = "'" + ((parameterValue != null) ? parameterValue : "") + "'"; // FIXME encode parameter value correctly for XPath } return parameterArray; } // -- Free xsltStylesheet handle -- public void finalize () { if (stylesheet != null) { free (); stylesheet = null; } } private native void free (); // -- Callbacks -- private InputStream resolveEntity (String publicId, String systemId) throws TransformerException { if (resolver != null) { systemId = resolver.resolve (null, systemId).getSystemId (); } if (systemId == null) { return null; } try { URL url = new URL (systemId); return XMLJ.getInputStream (url); } catch (IOException e) { throw new TransformerException (e); } } private void setDocumentLocator (Object ctx, Object loc) { } private void warning (String message, int lineNumber, int columnNumber, String publicId, String systemId) throws TransformerException { if (errorListener == null) { return; } SourceLocator l = new StandaloneLocator (lineNumber, columnNumber, publicId, systemId); errorListener.warning (new TransformerException (message, l)); } private void error (String message, int lineNumber, int columnNumber, String publicId, String systemId) throws TransformerException { if (errorListener == null) { return; } SourceLocator l = new StandaloneLocator (lineNumber, columnNumber, publicId, systemId); errorListener.error (new TransformerException (message, l)); } private void fatalError (String message, int lineNumber, int columnNumber, String publicId, String systemId) throws TransformerException { if (errorListener == null) { return; } SourceLocator l = new StandaloneLocator (lineNumber, columnNumber, publicId, systemId); errorListener.fatalError (new TransformerException (message, l)); } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -