package com.taobao.tddl.common.utils; import java.io.InputStream; import java.io.Writer; import javax.xml.XMLConstants; 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 javax.xml.transform.stream.StreamSource; import javax.xml.validation.Schema; import javax.xml.validation.SchemaFactory; import org.w3c.dom.Document; import org.xml.sax.ErrorHandler; import org.xml.sax.SAXException; import org.xml.sax.SAXParseException; import com.taobao.tddl.common.exception.TddlRuntimeException; /** * xml处理的一些简单包装 * * @author jianghang 2013-11-28 下午1:59:37 * @since 5.0.0 */ public class XmlHelper { public static Document createDocument(InputStream xml, InputStream schema) { try { // schema SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); Schema s = sf.newSchema(new StreamSource(schema)); // document DocumentBuilderFactory bf = DocumentBuilderFactory.newInstance(); bf.setNamespaceAware(true); bf.setSchema(s); DocumentBuilder builder = bf.newDocumentBuilder(); builder.setErrorHandler(new ErrorHandler() { @Override public void warning(SAXParseException exception) throws SAXException { throw new TddlRuntimeException("Xml Parser Warning.", exception); } @Override public void fatalError(SAXParseException exception) throws SAXException { throw new TddlRuntimeException("Xml Parser Fetal Error.", exception); } @Override public void error(SAXParseException exception) throws SAXException { throw new TddlRuntimeException("Xml Parser Error.", exception); } }); return builder.parse(xml); } catch (Exception e) { throw new TddlRuntimeException("Xml Parser Error.", e); } } public static void callWriteXmlFile(Document doc, Writer w, String encoding) { try { Source source = new DOMSource(doc); Result result = new StreamResult(w); Transformer xformer = TransformerFactory.newInstance().newTransformer(); xformer.setOutputProperty(OutputKeys.INDENT, "yes"); xformer.setOutputProperty(OutputKeys.ENCODING, encoding); xformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no"); xformer.transform(source, result); } catch (Exception e) { throw new TddlRuntimeException(e); } } }