Java Tutorial/XML/Transformer

Материал из Java эксперт
Перейти к: навигация, поиск

And now to attach an XSL

   <source lang="java">

import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.DOMImplementation; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; public class Main {

 public static void main(String args[]) throws Exception {
   DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
   DocumentBuilder builder = factory.newDocumentBuilder();
   DOMImplementation impl = builder.getDOMImplementation();
   Document xmldoc = impl.createDocument(null, "TODOs", null);
   Element root = xmldoc.getDocumentElement();
   Element e0 = xmldoc.createElement("TOPIC");
   Element e1 = xmldoc.createElement("TITLE");
   Node n1 = xmldoc.createTextNode("Java");
   e1.appendChild(n1);
   Element e2 = xmldoc.createElement("URL");
   Node n2 = xmldoc.createTextNode("http://www.server.ru");
   e2.appendChild(n2);
   e0.appendChild(e1);
   e0.appendChild(e2);
   root.appendChild(e0);
   Node pi = xmldoc.createProcessingInstruction("xml-stylesheet",
       "type=\"text/xsl\" href=\"TODOs.xsl\"");
   xmldoc.insertBefore(pi, root);
   StreamResult out = new StreamResult("howto.xml");
   DOMSource domSource = new DOMSource(xmldoc);
   TransformerFactory tf = TransformerFactory.newInstance();
   Transformer transformer = tf.newTransformer();
   transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");
   transformer.setOutputProperty(OutputKeys.METHOD, "xml");
   transformer.setOutputProperty(OutputKeys.ENCODING, "ISO-8859-1");
   transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");
   transformer.setOutputProperty(OutputKeys.INDENT, "yes");
   transformer.transform(domSource, out);
 }

}</source>





Applying XSLT Stylesheets

   <source lang="java">

import java.io.File; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamSource; public class Main {

 public static void main(String[] args) throws Exception{
   StreamSource xmlFile = new StreamSource(new File(args[0]));
   StreamSource xsltFile = new StreamSource(new File(args[1]));
   TransformerFactory xsltFactory = TransformerFactory.newInstance();
   Transformer transformer = xsltFactory.newTransformer(xsltFile);
   StreamResult resultStream = new StreamResult(System.out);
   transformer.transform(xmlFile, resultStream);
 }

}</source>





Catch TransformerException

   <source lang="java">

import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import javax.xml.transform.Result; import javax.xml.transform.Source; import javax.xml.transform.SourceLocator; import javax.xml.transform.Templates; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamSource; public class Main {

 public static void xsl(String inFilename, String outFilename, String xslFilename) {
   try {
     TransformerFactory factory = TransformerFactory.newInstance();
     Templates template = factory.newTemplates(new StreamSource(new FileInputStream(xslFilename)));
     Transformer xformer = template.newTransformer();
     Source source = new StreamSource(new FileInputStream(inFilename));
     Result result = new StreamResult(new FileOutputStream(outFilename));
     xformer.transform(source, result);
   } catch (FileNotFoundException e) {
   } catch (TransformerConfigurationException e) {
   } catch (TransformerException e) {
     SourceLocator locator = e.getLocator();
     int col = locator.getColumnNumber();
     int line = locator.getLineNumber();
     String publicId = locator.getPublicId();
     String systemId = locator.getSystemId();
   }
 }

}</source>





Create an XML file and attach an XSL

   <source lang="java">

import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.DOMImplementation; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; public class Main {

 public static void main(String args[]) throws Exception {
   DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
   DocumentBuilder builder = factory.newDocumentBuilder();
   DOMImplementation impl = builder.getDOMImplementation();
   Document xmldoc = impl.createDocument(null, "XMLDoc", null);
   Element root = xmldoc.getDocumentElement();
   Element e0 = xmldoc.createElement("Doc");
   Element e1 = xmldoc.createElement("TITLE");
   Node n1 = xmldoc.createTextNode("Java");
   e1.appendChild(n1);
   Element e2 = xmldoc.createElement("data");
   Node n2 = xmldoc.createTextNode("text node");
   e2.appendChild(n2);
   e0.appendChild(e1);
   e0.appendChild(e2);
   root.appendChild(e0);
   StreamResult out = new StreamResult("howto.xml");
   DOMSource domSource = new DOMSource(xmldoc);
   TransformerFactory tf = TransformerFactory.newInstance();
   Transformer transformer = tf.newTransformer();
   transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");
   transformer.setOutputProperty(OutputKeys.METHOD, "xml");
   transformer.setOutputProperty(OutputKeys.ENCODING, "ISO-8859-1");
   transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");
   transformer.setOutputProperty(OutputKeys.INDENT, "yes");
   transformer.transform(domSource, out);
 }

}</source>





Formatting an XML file using Transformer

   <source lang="java">

import java.io.File; import java.io.FileInputStream; import java.io.InputStreamReader; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.OutputKeys; import javax.xml.transform.Result; import javax.xml.transform.Source; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Document; import org.xml.sax.InputSource; public class Main {

 public static void main(String[] argv) throws Exception {
 }
 static void formatXMLFile(String file) throws Exception{
   DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
   DocumentBuilder builder = factory.newDocumentBuilder();
   Document document = builder.parse(new InputSource(new InputStreamReader(new FileInputStream(
       file))));
   Transformer xformer = TransformerFactory.newInstance().newTransformer();
   xformer.setOutputProperty(OutputKeys.METHOD, "xml");
   xformer.setOutputProperty(OutputKeys.INDENT, "yes");
   xformer.setOutputProperty("b;http://xml.apache.org/xsltd;indent-amount", "4");
   xformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
   Source source = new DOMSource(document);
   Result result = new StreamResult(new File(file));
   xformer.transform(source, result);
 }

}</source>





Source for the JAXP Transformation Application

   <source lang="java">

import java.io.FileNotFoundException; import java.io.FileOutputStream; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamSource; public class JAXPTransform {

 public static void main(String args[]) throws TransformerConfigurationException,
     TransformerException, FileNotFoundException {
   TransformerFactory factory = TransformerFactory.newInstance();
   StreamSource stylesheet = new StreamSource(args[1]);
   StreamSource xmlDoc = new StreamSource(args[0]);
   StreamResult result = new StreamResult(new FileOutputStream(args[2]));
   Transformer transFormer = factory.newTransformer(stylesheet);
   transFormer.transform(xmlDoc, result);
 }

}</source>





Source for Transforming DOM Node to HTML with JAXP

   <source lang="java">

import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamSource; import org.w3c.dom.Document; public class JAXPTransformNode {

 public static void main(String args[]) throws Exception, TransformerException,
     FileNotFoundException {
   TransformerFactory factory = TransformerFactory.newInstance();
   DOMSource stylesheet = new DOMSource(buildDoc(args[1]));
   StreamSource xmlDoc = new StreamSource(args[0]);
   StreamResult result = new StreamResult(new FileOutputStream(args[2]));
   Transformer transFormer = factory.newTransformer(stylesheet);
   transFormer.transform(xmlDoc, result);
 }
 public static Document buildDoc(String document) throws Exception {
   DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
   DocumentBuilder db = dbf.newDocumentBuilder();
   Document theDocument = db.parse(new File(document));
   return theDocument;
 }

}</source>





Transforming an XML File with XSL into a DOM Document

   <source lang="java">

import java.io.FileInputStream; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.Result; import javax.xml.transform.Source; import javax.xml.transform.Templates; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMResult; import javax.xml.transform.stream.StreamSource; import org.w3c.dom.Document; public class Main {

 public static void main(String[] argv) throws Exception {
   TransformerFactory factory = TransformerFactory.newInstance();
   Templates template = factory.newTemplates(new StreamSource(new FileInputStream("xsl.xlt")));
   Transformer xformer = template.newTransformer();
   Source source = new StreamSource(new FileInputStream("in.xml"));
   DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
   Document doc = builder.newDocument();
   Result result = new DOMResult(doc);
   xformer.transform(source, result);
 }

}</source>