/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.utils.incubator.xml; import java.io.File; import java.io.IOException; import java.io.InputStream; import javax.xml.XMLConstants; import javax.xml.transform.stream.StreamSource; import javax.xml.validation.Schema; import javax.xml.validation.SchemaFactory; import javax.xml.validation.Validator; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.io.SAXReader; import org.xml.sax.SAXException; /** * Utility class that provides methods to read/write XML-documents from/to different * sources/targets. The underlying library is dom4j so when reading/writing XML-documents, an * <code>org.dom4j.Document</code> will be used. * * @author Andre Nurzenski */ public final class XMLIOSupport { /** * * Private constructor, because this is a utility class. * */ private XMLIOSupport() { } /** * * Reads XML data from an input stream and returns a dom4j <code>Document</code>. * * @param xmlInputStream * An input stream of the XML data which is intend to be parsed. * @return a <code>Document</code> representation of the parsed file. * @throws DocumentException * if an error occurs during parsing. */ public static Document readXML(InputStream xmlInputStream) throws DocumentException { // Initialize the SAX reader and set several properties. SAXReader saxReader = new SAXReader(); saxReader.setMergeAdjacentText(true); saxReader.setStringInternEnabled(true); saxReader.setStripWhitespaceText(true); // Read the XML file from the specified input stream. Document document = saxReader.read(xmlInputStream); return document; } /** * * Reads an XML file and returns a dom4j <code>Document</code>. * * @param filename * The filename of the XML file which is intend to be parsed. * @return a <code>Document</code> representation of the parsed file. * @throws DocumentException * if an error occurs during parsing. */ public static Document readXML(String filename) throws DocumentException { return readXML(new File(filename)); } /** * * Reads an XML file and returns a dom4j <code>Document</code>. * * @param file * The XML file which is intend to be parsed. * @return a <code>Document</code> representation of the parsed file. * @throws DocumentException * if an error occurs during parsing. */ public static Document readXML(File file) throws DocumentException { // Initialize the SAX reader and set several properties. SAXReader saxReader = new SAXReader(); saxReader.setMergeAdjacentText(true); saxReader.setStringInternEnabled(true); saxReader.setStripWhitespaceText(true); // Read the XML file from the specified file. Document document = saxReader.read(file); return document; } /** * * Reads an XML file, validates it against a schema and returns a dom4j <code>Document</code>. * * @param schema * The schema file which is intend to be used for validation. * @param xml * The XML file which is intend to be parsed. * @return a <code>Document</code> representation of the parsed file. * @throws SAXException * if the specified XML file is not valid. * @throws IOException * if an I/O exception occurs during validation. * @throws DocumentException * if parsing the XML document failed. */ public static Document readXML(String schema, String xml) throws SAXException, IOException, DocumentException { return readXML(new File(schema), new File(xml)); } /** * * Reads an XML file, validates it against a schema and returns a dom4j <code>Document</code>. * * @param schemaFile * The schema <code>File</code> which is intend to be used for validation. * @param xmlFile * The XML <code>File</code> which is intend to be parsed. * @return a <code>Document</code> representation of the parsed file. * @throws SAXException * if the specified XML file is not valid. * @throws IOException * if an I/O exception occurs during validation. * @throws DocumentException * if parsing the XML document failed. */ public static Document readXML(File schemaFile, File xmlFile) throws SAXException, IOException, DocumentException { SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); Schema schema = factory.newSchema(schemaFile); Validator validator = schema.newValidator(); validator.validate(new StreamSource(xmlFile)); return readXML(xmlFile); } }