All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.star.additional.XmlDoc Maven / Gradle / Ivy

package com.star.additional;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Writer;
import java.util.Vector;

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.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.Text;
import org.xml.sax.InputSource;

/* 

 * 

Company: 凌科软件 www.elingke.com

* @author liubaojun * @version 1.0 * Created on 2004-11-29 * 来源于 elinkBSP 部分源代码 * * 没咋深入过 */ public final class XmlDoc { private XmlDoc() { } public static synchronized Document newDocument() { Document doc = null; try { DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder(); doc = db.newDocument(); } catch (Exception e) { // LogUtil.logException(e); } return doc; } public static synchronized Element createRootElement() { Element rootElement = null; try { DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder(); Document doc = db.newDocument(); rootElement = doc.getDocumentElement(); } catch (Exception e) { e.printStackTrace(); } return rootElement; } public static synchronized Element getRootElement(String fileName) { if (fileName == null || fileName.length() == 0) { return null; } try { Element rootElement = null; FileInputStream fis = new FileInputStream(fileName); rootElement = getRootElement(fis); fis.close(); return rootElement; } catch (Exception e) { return null; } } public static synchronized Element getRootElement(InputStream is) { if (is == null) { return null; } Element rootElement = null; try { DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder(); Document doc = db.parse(is); rootElement = doc.getDocumentElement(); } catch (Exception e) { e.printStackTrace(); } return rootElement; } public static synchronized Element getRootElement(InputSource is) { if (is == null) { return null; } Element rootElement = null; try { DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder(); Document doc = db.parse(is); rootElement = doc.getDocumentElement(); } catch (Exception e) { e.printStackTrace(); } return rootElement; } @SuppressWarnings("unchecked") public static synchronized Element[] getChildElements(Element element) { if (element == null) { return null; } @SuppressWarnings("rawtypes") Vector childs = new Vector(); for (Node node = element.getFirstChild(); node != null; node = node.getNextSibling()) { if (node instanceof Element) { childs.add((Element) node); } } Element[] elmt = new Element[childs.size()]; childs.toArray(elmt); return elmt; } @SuppressWarnings({ "rawtypes", "unchecked" }) public static synchronized Element[] getChildElements(Element element, String childName) { if (element == null || childName == null || childName.length() == 0) { return null; } Vector childs = new Vector(); for (Node node = element.getFirstChild(); node != null; node = node.getNextSibling()) { if (node instanceof Element) { if (node.getNodeName().equals(childName)) { childs.add((Element) node); } } } Element[] elmt = new Element[childs.size()]; childs.toArray(elmt); return elmt; } @SuppressWarnings("unchecked") public static synchronized Node[] getChildNodes(Node node) { if (node == null) { return null; } @SuppressWarnings("rawtypes") Vector childs = new Vector(); for (Node n = node.getFirstChild(); n != null; n = n.getNextSibling()) { childs.add((Element) n); } Node[] childNodes = new Element[childs.size()]; childs.toArray(childNodes); return childNodes; } public static synchronized Element getChildElement(Element element, String childName) { if (element == null || childName == null || childName.length() == 0) { return null; } Element childs = null; for (Node node = element.getFirstChild(); node != null; node = node.getNextSibling()) { if (node instanceof Element) { if (node.getNodeName().equals(childName)) { childs = (Element) node; break; } } } return childs; } public static synchronized Element getChildElement(Element element) { if (element == null) { return null; } Element childs = null; for (Node node = element.getFirstChild(); node != null; node = node.getNextSibling()) { if (node instanceof Element) { childs = (Element) node; break; } } return childs; } @SuppressWarnings("unchecked") public static synchronized String[] getElenentValues(Element element) { if (element == null) { return null; } @SuppressWarnings("rawtypes") Vector childs = new Vector(); for (Node node = element.getFirstChild(); node != null; node = node.getNextSibling()) { if (node instanceof Text) { childs.add(node.getNodeValue()); } } String[] values = new String[childs.size()]; childs.toArray(values); return values; } public static synchronized String getElenentValue(Element element) { if (element == null) { return null; } String retnStr = null; for (Node node = element.getFirstChild(); node != null; node = node.getNextSibling()) { if (node instanceof Text) { String str = node.getNodeValue(); if (str == null || str.length() == 0 || str.trim().length() == 0) { continue; } else { retnStr = str; break; } } } return retnStr; } public static synchronized Element findElementByName(Element e, String name) { if (e == null || name == null || name.length() == 0) { return null; } String nodename = null; Element[] childs = getChildElements(e); for (int i = 0; i < childs.length; i++) { nodename = childs[i].getNodeName(); if (name.equals(nodename)) { return childs[i]; } } for (int i = 0; i < childs.length; i++) { Element retn = findElementByName(childs[i], name); if (retn != null) { return retn; } } return null; } public static synchronized Element findElementByAttr(Element e, String attrName, String attrVal) { return findElementByAttr(e, attrName, attrVal, true); } public static synchronized Element findElementByAttr(Element e, String attrName, String attrVal, boolean dept) { if (e == null || attrName == null || attrName.length() == 0 || attrVal == null || attrVal.length() == 0) { return null; } String tmpValue = null; Element[] childs = getChildElements(e); for (int i = 0; i < childs.length; i++) { tmpValue = childs[i].getAttribute(attrName); if (attrVal.equals(tmpValue)) { return childs[i]; } } if (dept) { for (int i = 0; i < childs.length; i++) { Element retn = findElementByAttr(childs[i], attrName, attrVal); if (retn != null) { return retn; } } } return null; } public static synchronized String formatXml(Element e) { return formatXml(e, 0); } /** * 格式化XML输出串. * * @param e * xml元素 * @param indent * 缩进 * @return xml字符串 */ public static synchronized String formatXml(Element e, int indent) { indent++; for (Node n = e.getFirstChild(); n != null; n = n.getNextSibling()) { appendIndent(e, n, indent); if (!n.getNodeName().equals("#text")) { formatXml((Element) n, indent); } } indent--; appendIndent(e, indent); return e.toString(); } /** * * 在指定的节点前插入格式表示. * */ private static synchronized void appendIndent(Element e, Node pos, int indent) { Document doc = e.getOwnerDocument(); if (indent == 0) { e.insertBefore(doc.createTextNode("\n"), pos); } for (int i = 0; i < indent; i++) { if (i == 0) { e.insertBefore(doc.createTextNode("\n\t"), pos); } else { e.insertBefore(doc.createTextNode("\t"), pos); } } } /** * * 追加格式表示. * */ private static synchronized void appendIndent(Element e, int indent) { Document doc = e.getOwnerDocument(); if (indent == 0) { e.appendChild(doc.createTextNode("\n")); } for (int i = 0; i < indent; i++) { if (i == 0) { e.appendChild(doc.createTextNode("\n\t")); } else { e.appendChild(doc.createTextNode("\t")); } } } public static synchronized void setAttribute(Element e, String name, String value) { if (e == null || name == null || name.length() == 0 || value == null || value.length() == 0) return; else e.setAttribute(name, value); } public static synchronized String getAttribute(Element e, String name) { return getAttribute(e, name, null); } public static synchronized String getAttribute(Element e, String name, String defval) { if (e == null || name == null || name.length() == 0) return defval; else return e.getAttribute(name); } public void transformerWrite(Element doc, String filename) throws Exception { DOMSource doms = new DOMSource(doc); File f = new File(filename); StreamResult sr = new StreamResult(f); transformerWrite(doms, sr); } public void transformerWrite(Element doc, File file) throws Exception { DOMSource doms = new DOMSource(doc); StreamResult sr = new StreamResult(file); transformerWrite(doms, sr); } public void transformerWrite(Element doc, OutputStream outstream) throws Exception { DOMSource doms = new DOMSource(doc); StreamResult sr = new StreamResult(outstream); transformerWrite(doms, sr); } public void transformerWrite(Element doc, Writer outwriter) throws Exception { DOMSource doms = new DOMSource(doc); StreamResult sr = new StreamResult(outwriter); transformerWrite(doms, sr); } public void transformerWrite(DOMSource doms, StreamResult sr) throws Exception { TransformerFactory tf = TransformerFactory.newInstance(); Transformer t = tf.newTransformer(); t.setOutputProperty(OutputKeys.ENCODING, "GBK"); t.transform(doms, sr); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy