package com.eoeandorid.reader; import java.io.BufferedOutputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.StringWriter; import java.util.zip.Deflater; import java.util.zip.DeflaterOutputStream; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; 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 org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; public class DomUtil { protected Document document; protected Element rootElement; public DomUtil() { try { document = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument(); rootElement = document.createElement("root"); document.appendChild(rootElement); } catch (ParserConfigurationException e) { System.out.println("Can not create the Document object!"); e.printStackTrace(); } } /** * 在root节点下 创建节点 * @param tagName 节点名次 * @return */ public Element element(String tagName){ return element(rootElement, tagName); } /** * 创建节点 * @param node 目标节点 * @param tagName 节点名称 * @return */ public Element element(Node node, String tagName) { Element el = document.createElement(tagName); node.appendChild(el); return el; } /** * 在root节点下 创建节点 * * @param tagName 节点名称 * @param value 节点值 * @return 当前创建的节点 */ public Element element(String tagName, Object value) { return this.element(rootElement, tagName, value); } /** * 创建节点 * * @param tagName * @param value * @param node * @return 当前创建的节点 */ public Element element(Node node, String tagName, Object value) { Element el = document.createElement(tagName); node.appendChild(el); el.appendChild(document.createTextNode(String.valueOf(value))); return el; } /** * 返回文档对象 * * @return */ public Node getNode() { return document; } @Override public String toString() { if(document == null) return null; StringWriter stringWriter = new StringWriter(); TransformerFactory factory = TransformerFactory.newInstance(); try { Transformer transformer=factory.newTransformer(); transformer.transform(new DOMSource(document),new StreamResult(stringWriter)); } catch (TransformerException e) { e.printStackTrace(); } return stringWriter.toString(); } public static String getElementValue(Document doc, String element, int index) { try { return doc.getElementsByTagName(element).item(index).getFirstChild().getNodeValue().trim(); } catch (Exception e) { return ""; } } public static String getElementValue(Document doc, String element, int index,String nullDefault) { try { String rst=doc.getElementsByTagName(element).item(index).getFirstChild().getNodeValue().trim(); if("".equals(rst) || rst == null){ rst=nullDefault; } return rst; } catch (Exception e) { return ""; } } public static String getElementAttr(Document doc, String element,String attr) { try { Element el=(Element)doc.getElementsByTagName(element).item(0); return el.getAttribute(attr); } catch (Exception e) { return ""; } } public static String getElementAttr(Document doc, String element,String attr, int index) { try { Element el=(Element)doc.getElementsByTagName(element).item(index); return el.getAttribute(attr); } catch (Exception e) { return ""; } } public static byte[] deflaterData(byte[] data) throws IOException{ byte[] buffer = null; ByteArrayOutputStream baos = null; DeflaterOutputStream dos = null; BufferedOutputStream bos = null; try { baos = new ByteArrayOutputStream(); dos = new DeflaterOutputStream(baos, new Deflater(Deflater.BEST_COMPRESSION, false)); bos = new BufferedOutputStream(dos); bos.write(data, 0, data.length); bos.close(); dos.finish(); buffer = baos.toByteArray(); } catch (IOException e) { throw new IOException(e.getMessage()); } finally { if (baos !=null) baos.close(); if (dos != null) dos.close(); if (bos != null) bos.close(); } return buffer; } }