• Java操作XML的工具类


      1 import java.io.File;
      2 import java.io.FileOutputStream;
      3 import java.io.IOException;
      4 import java.io.InputStream;
      5 import java.io.OutputStream;
      6 import java.io.StringWriter;
      7 import java.io.Writer;
      8 
      9 import javax.xml.transform.Transformer;
     10 import javax.xml.transform.TransformerException;
     11 import javax.xml.transform.TransformerFactory;
     12 import javax.xml.transform.stream.StreamResult;
     13 import javax.xml.transform.stream.StreamSource;
     14 
     15 import org.dom4j.Document;
     16 import org.dom4j.DocumentException;
     17 import org.dom4j.DocumentHelper;
     18 import org.dom4j.ProcessingInstruction;
     19 import org.dom4j.io.DocumentSource;
     20 import org.dom4j.io.OutputFormat;
     21 import org.dom4j.io.SAXReader;
     22 import org.dom4j.io.XMLWriter;
     23 
     24 public class XMLUtil {
     25     /**
     26      * 以编码为UTF-8的方式返回xml
     27      * @param doc Document
     28      * @return String
     29      */
     30     public static String toString(Document doc) {
     31         return toString(doc, "UTF-8");
     32     }
     33 
     34     /**
     35      * 以指定编码格式返回xml
     36      * @param doc  Document
     37      * @param encoding String
     38      * @return String
     39      */
     40     public static String toString(Document doc, String encoding) {
     41         if (null != doc) {
     42             OutputFormat outputFormat = new OutputFormat();
     43             outputFormat.setEncoding(encoding);
     44             StringWriter stringWriter = new StringWriter();
     45             XMLWriter xmlWriter = new XMLWriter(stringWriter, outputFormat);
     46             try {
     47                 xmlWriter.write(doc);
     48                 return stringWriter.toString();
     49             } catch (IOException ex) {
     50                 return "";
     51             }
     52         } else {
     53             return "";
     54         }
     55     }
     56     
     57     private static String converPath( String path ){
     58         if(OSUtil.LIUNX.equals(System.getProperty("os.name"))){
     59             path = OSUtil.convert2linuxPath(path) ;
     60             System.out.println( "system is Linux , path conver to :" + path );
     61         }
     62         return path ;
     63     }
     64     
     65     
     66     /**
     67      * 创建xml格式的文件
     68      * @param doc
     69      * @param encoding
     70      * @param strFileName
     71      * @return
     72      */
     73     public static boolean saveXMLDocumentToFile(Document doc, String encoding, String strFileName) {
     74         boolean flag = false;
     75         // 创建路径
     76         strFileName = converPath(strFileName);
     77         String strDir = FileNameUtil.extractFilePath(strFileName);
     78         DirectoryUtil.forceDirectory(strDir);
     79 
     80         if (encoding == null || encoding.length() == 0) {
     81             encoding = "UTF-8";
     82         }
     83         OutputFormat outputFormat = new OutputFormat();
     84         outputFormat.setEncoding(encoding);
     85         FileOutputStream fos = null;
     86         XMLWriter xmlWriter = null;
     87         try {
     88             // FileWriter fileWriter = new FileWriter(strFileName);
     89             // XMLWriter xmlWriter = new XMLWriter(fileWriter, outputFormat);//
     90             // 不能解决UTF-8编码问题
     91             fos = new FileOutputStream(strFileName);// 可解决UTF-8编码问题
     92             xmlWriter = new XMLWriter(fos, outputFormat);
     93             xmlWriter.write(doc);
     94             flag = true;
     95         } catch (IOException e) {
     96             flag = false;
     97             System.out.println("保存xml文件出错:" + e.getMessage());
     98             e.printStackTrace();
     99         } finally {
    100             try {
    101                 if (xmlWriter != null) {
    102                     xmlWriter.flush();
    103                 }
    104                 if (fos != null) {
    105                     fos.flush();
    106                 }
    107                 if (xmlWriter != null) {
    108                     xmlWriter.close();
    109                 }
    110                 if (fos != null) {
    111                     fos.close();
    112                 }
    113             } catch (IOException e) {
    114                 e.printStackTrace();
    115             }
    116         }
    117         return flag;
    118     }
    119     
    120     /**
    121      * 创建格式化过的xml格式的文件
    122      * @param doc
    123      * @param encoding
    124      * @param strFileName
    125      * @return
    126      */
    127     public static boolean saveFormatXMLDocumentToFile(Document doc, String encoding,
    128             String strFileName)  {
    129         boolean flag = false;
    130         
    131         // 创建路径
    132         strFileName = converPath(strFileName);
    133         String strDir = FileNameUtil.extractFilePath(strFileName) ;
    134         DirectoryUtil.forceDirectory(strDir);
    135 
    136         if (encoding == null || encoding.length() == 0) {
    137             encoding = "UTF-8";
    138         }
    139         OutputFormat outputFormat = OutputFormat.createPrettyPrint();
    140         outputFormat.setEncoding(encoding);
    141         FileOutputStream fos = null;
    142         XMLWriter xmlWriter  = null;
    143         try{
    144             fos = new FileOutputStream(strFileName);// 可解决UTF-8编码问题
    145             xmlWriter = new XMLWriter(fos, outputFormat);
    146             xmlWriter.write(doc);
    147             flag = true;
    148         }catch(IOException e){
    149             flag = false;
    150         }finally{
    151             try {
    152                 xmlWriter.flush();
    153                 fos.flush();
    154                 xmlWriter.close();
    155                 fos.close();
    156             } catch (IOException e) {
    157                 e.printStackTrace();
    158             }
    159             
    160         }
    161         return flag;
    162     }
    163     
    164     public static void saveXMLDocumentToOutputStream(Document doc,
    165             String encoding, OutputStream outputstream) throws IOException {
    166         if (encoding == null || encoding.length() == 0) {
    167             encoding = "UTF-8";
    168         }
    169         OutputFormat outputFormat = new OutputFormat();
    170         outputFormat.setEncoding(encoding);
    171         XMLWriter xmlWriter = new XMLWriter(outputstream, outputFormat);
    172         xmlWriter.write(doc);
    173         xmlWriter.close();
    174         outputstream.close();
    175     }
    176 
    177     public static Document loadXMLFile(String strFileName)
    178             throws DocumentException {
    179         SAXReader saxReader = new SAXReader();
    180         saxReader.setValidation(false);
    181         saxReader.setEntityResolver(new IgnoreDTDEntityResolver()); 
    182         return saxReader.read(new File(OSUtil.convert2linuxPath(strFileName)));
    183     }
    184 
    185     public static Document loadXMLInputstream(InputStream in){
    186         SAXReader reader = new SAXReader();
    187         try {
    188             return reader.read(in);
    189         } catch (DocumentException e) {
    190             return null;
    191         }
    192     }
    193     
    194     /**
    195      * 用于xml 与 xsl 的归并输出含处理指令的xml到out
    196      * 处理指令指定了浏览器渲染的时候使用的xsl文件相对路径
    197      * 
    198      * @author sun
    199      */
    200     @SuppressWarnings("unchecked")
    201     public static void outputXML(Document xmldoc, String xslname,
    202             Writer out) throws Exception {
    203         if (xslname != null) {
    204             ProcessingInstruction pi = DocumentHelper
    205                     .createProcessingInstruction("xml-stylesheet", "href=""
    206                             + xslname + "" type="text/xsl"");
    207             xmldoc.content().add(0, pi);
    208         }
    209         TransformerFactory factory = TransformerFactory.newInstance();
    210         Transformer transformer = factory.newTransformer();
    211         transformer.setOutputProperty("encoding", "UTF-8");
    212 
    213         transformer
    214                 .transform(new DocumentSource(xmldoc), new StreamResult(out));
    215         out.flush();
    216         out.close();
    217     }
    218 
    219     /**
    220      * 用于xml 与 xsl 的归并输出xml或html到out
    221      * 输出html时,xsl名称不能为null
    222      * @author
    223      * @throws TransformerException 
    224      */
    225     public static void transformXml(Document xmldoc, String xslname,
    226             Writer out) throws TransformerException{
    227         TransformerFactory factory = TransformerFactory.newInstance();
    228         Transformer transformer = xslname == null ? factory.newTransformer()
    229                 : factory.newTransformer(new StreamSource(xslname));
    230         transformer.setOutputProperty("encoding", "UTF-8");
    231 
    232         transformer.transform(new DocumentSource(xmldoc),
    233                 new StreamResult(out));
    234     }
    235 }
  • 相关阅读:
    证明三个简单数学问题~(≧▽≦)/~啦啦啦
    计算时间复杂度
    字符三角形(循环做法)
    luogu Peter的烟
    c++一本通1000
    luogu最长连号
    luogu子数整数
    luogu三角函数
    (因更改文件夹造成)anaconda prompt 提示系统找不到指定的路径
    echarts之树形图改变节点之间连线颜色以及结点的颜色
  • 原文地址:https://www.cnblogs.com/DreamDrive/p/5762605.html
Copyright © 2020-2023  润新知