com.star.additional.XmlDoc Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of common Show documentation
Show all versions of common Show documentation
some utility class for java develop
The newest version!
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