package com.elink.util; 
/*  * <p>Company: 凌科软件 www.elingke.com </p>  * @author liubaojun  * @version 1.0  * Created on 2004-11-29  * 来源于 elinkBSP 部分源代码  */   import java.io.*; import java.util.*; import javax.xml.parsers.*; import javax.xml.transform.*; import javax.xml.transform.dom.*; import javax.xml.transform.stream.*; 
import org.w3c.dom.*; import org.xml.sax.*; 
public class XmlUtil {  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;  } 
 public static synchronized Element[] getChildElements(Element element)  {   if (element == null)   {    return null;   }   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;  } 
 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;  } 
 public static synchronized Node[] getChildNodes(Node node)  {   if (node == null)   {    return null;   }   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;  } 
 public static synchronized String[] getElenentValues(Element element)  {   if (element == null)   {    return null;   }   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输出串.   */  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 );  } }
   
 
  |