⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dxmlutil.java

📁 jvm内嵌的xml分析处理类
💻 JAVA
字号:
package org.xinguan.common.util;

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.xinguan.common.logs.*;
import org.xml.sax.*;

final public class DXmlUtil
{
  static private DocumentBuilder DomBuilder;

  static private Transformer PlainTransformer;

  static private Transformer IndentTransformer;

  static
  {
    try
    {
      DomBuilder=DocumentBuilderFactory.newInstance().newDocumentBuilder();
    }
    catch(Throwable throwed)
    {
      LogsUtil.log(Level.Error,"Xml文档解析器创建--->异常",throwed);
    }

    TransformerFactory tffactory=TransformerFactory.newInstance();

    try
    {
      tffactory.setAttribute("indent-number",2);
    }
    catch(Throwable th)
    {
    }

    try
    {
      PlainTransformer=tffactory.newTransformer();
      PlainTransformer.setOutputProperty("method","xml");
      PlainTransformer.setOutputProperty("indent","no");
      PlainTransformer.setOutputProperty("encoding","gb2312");
    }
    catch(Throwable throwed)
    {
      LogsUtil.log(Level.Error,"Xml文档单行格式化器创建--->异常",throwed);
    }

    try
    {
      IndentTransformer=tffactory.newTransformer();
      IndentTransformer.setOutputProperty("method","xml");
      IndentTransformer.setOutputProperty("indent","yes");
      IndentTransformer.setOutputProperty("encoding","gb2312");
    }
    catch(Throwable throwed)
    {
      LogsUtil.log(Level.Error,"Xml文档多行格式化器创建--->异常",throwed);
    }
  }

  final static public Document newDocument()
  {
    try
    {
      return DomBuilder.newDocument();
    }
    catch(Exception ex)
    {
      LogsUtil.log(Level.Error,"Xml文档创建--->异常",ex);

      return null;
    }
  }

  final static public Element newDocument(String name)
  {
    try
    {
      Document doc=DomBuilder.newDocument();

      Element root=doc.createElement(name);

      doc.appendChild(root);

      return root;
    }
    catch(Exception ex)
    {
      LogsUtil.log(Level.Error,"Xml文档创建--->异常",ex);

      return null;
    }
  }

  final static public Element newElement(Document doc,String name)
  {
    return doc.createElement(name);
  }

  final static public Element newElement(Document doc,String name,Hashtable<?,?> attrs)
  {
    Element element=doc.createElement(name);

    if(attrs!=null)
    {
      for(Object key:attrs.keySet())
      {
        element.setAttribute(key.toString(),attrs.get(key).toString());
      }
    }

    return element;
  }

  final static public Element newElement(Element parent,String name)
  {
    Element element=parent.getOwnerDocument().createElement(name);

    parent.appendChild(element);

    return element;
  }

  final static public Element newElement(Element parent,String name,Hashtable<?,?> attrs)
  {
    Element element=parent.getOwnerDocument().createElement(name);

    if(attrs!=null)
    {
      for(Object key:attrs.keySet())
      {
        String attrname=key.toString();
        String attrvalue=attrs.get(key).toString();

        element.setAttribute(attrname,attrvalue);
      }
    }

    parent.appendChild(element);

    return element;
  }

  final static public String xml2String(Document doc)
  {
    return xml2String(doc,false);
  }

  final static public Element child(Element parent,String nameid)
  {
    NodeList nodes=parent.getElementsByTagName(nameid);

    if(nodes!=null&&nodes.getLength()==1&&nodes.item(0) instanceof Element)
    {
      return (Element)nodes.item(0);
    }

    throw new RuntimeException("指定的Xml子节点没有找到");
  }

  final static public List<Element> children(Element parent,String nameid)
  {
    NodeList nodes=parent.getElementsByTagName(nameid);

    List<Element> children=new ArrayList<Element>();

    for(int idx=0;idx<nodes.getLength();idx++)
    {
      Node node=nodes.item(idx);

      if(node instanceof Element)
      {
        children.add((Element)node);
      }
    }

    return children;
  }

  final static public String xml2String(Document doc,boolean oneline)
  {
    try
    {
      StringWriter writer=new StringWriter();

      if(oneline)
      {
        PlainTransformer.transform(new DOMSource(doc),new StreamResult(writer));
      }
      else
      {
        IndentTransformer.transform(new DOMSource(doc),new StreamResult(writer));
      }

      return oneline?writer.toString().replaceAll("\r\n","").replaceAll("\t",""):writer.toString();
    }
    catch(Throwable ex)
    {
      throw new RuntimeException("Xml文档转换--->异常",ex);
    }
  }

  final static public Document string2Xml(String xml)
  {
    InputSource source=new InputSource(new StringReader(SystUtil.propString(xml)));

    try
    {
      return DomBuilder.parse(source);
    }
    catch(Throwable th)
    {
      throw new RuntimeException("Xml文档分析--->异常",th);
    }
  }

  public static void main(String[] args)
  {

    System.out.println("0002_夏富春_320981198203038817_上海建设银行_000000000000__".split("\\_").length);

    System.out.println("0002_夏富春_320981198203038817_上海建设银行_000000000000__".split("_").length);

    Document doc=newDocument();

    Element root=newElement(doc,"root");

    doc.appendChild(root);

    Element elm2=newElement(root,"day");

    elm2.setTextContent("help");

    Element elm=newElement(root,"size");

    elm.setAttribute("name","报到的d");

    Hashtable<String,String> inattrs=new Hashtable<String,String>();
    inattrs.put("p1","24");
    inattrs.put("p3","23");
    inattrs.put("p12","22");

    newElement(elm,"info",inattrs);

    newElement(elm,"info",null);

    String xml=xml2String(doc,true);

    System.out.println(xml);

    Document doc2=string2Xml(xml);

    System.out.println(DXmlUtil.xml2String(doc2));

  }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -