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. * 创建xml格式的文件
  67. * @param doc
  68. * @param encoding
  69. * @param strFileName
  70. * @return
  71. */
  72. public static boolean saveXMLDocumentToFile(Document doc, String encoding, String strFileName) {
  73. boolean flag = false;
  74. // 创建路径
  75. strFileName = converPath(strFileName);
  76. String strDir = FileNameUtil.extractFilePath(strFileName);
  77. DirectoryUtil.forceDirectory(strDir);
  78.  
  79. if (encoding == null || encoding.length() == 0) {
  80. encoding = "UTF-8";
  81. }
  82. OutputFormat outputFormat = new OutputFormat();
  83. outputFormat.setEncoding(encoding);
  84. FileOutputStream fos = null;
  85. XMLWriter xmlWriter = null;
  86. try {
  87. // FileWriter fileWriter = new FileWriter(strFileName);
  88. // XMLWriter xmlWriter = new XMLWriter(fileWriter, outputFormat);//
  89. // 不能解决UTF-8编码问题
  90. fos = new FileOutputStream(strFileName);// 可解决UTF-8编码问题
  91. xmlWriter = new XMLWriter(fos, outputFormat);
  92. xmlWriter.write(doc);
  93. flag = true;
  94. } catch (IOException e) {
  95. flag = false;
  96. System.out.println("保存xml文件出错:" + e.getMessage());
  97. e.printStackTrace();
  98. } finally {
  99. try {
  100. if (xmlWriter != null) {
  101. xmlWriter.flush();
  102. }
  103. if (fos != null) {
  104. fos.flush();
  105. }
  106. if (xmlWriter != null) {
  107. xmlWriter.close();
  108. }
  109. if (fos != null) {
  110. fos.close();
  111. }
  112. } catch (IOException e) {
  113. e.printStackTrace();
  114. }
  115. }
  116. return flag;
  117. }
  118.  
  119. /**
  120. * 创建格式化过的xml格式的文件
  121. * @param doc
  122. * @param encoding
  123. * @param strFileName
  124. * @return
  125. */
  126. public static boolean saveFormatXMLDocumentToFile(Document doc, String encoding,
  127. String strFileName) {
  128. boolean flag = false;
  129.  
  130. // 创建路径
  131. strFileName = converPath(strFileName);
  132. String strDir = FileNameUtil.extractFilePath(strFileName) ;
  133. DirectoryUtil.forceDirectory(strDir);
  134.  
  135. if (encoding == null || encoding.length() == 0) {
  136. encoding = "UTF-8";
  137. }
  138. OutputFormat outputFormat = OutputFormat.createPrettyPrint();
  139. outputFormat.setEncoding(encoding);
  140. FileOutputStream fos = null;
  141. XMLWriter xmlWriter = null;
  142. try{
  143. fos = new FileOutputStream(strFileName);// 可解决UTF-8编码问题
  144. xmlWriter = new XMLWriter(fos, outputFormat);
  145. xmlWriter.write(doc);
  146. flag = true;
  147. }catch(IOException e){
  148. flag = false;
  149. }finally{
  150. try {
  151. xmlWriter.flush();
  152. fos.flush();
  153. xmlWriter.close();
  154. fos.close();
  155. } catch (IOException e) {
  156. e.printStackTrace();
  157. }
  158.  
  159. }
  160. return flag;
  161. }
  162.  
  163. public static void saveXMLDocumentToOutputStream(Document doc,
  164. String encoding, OutputStream outputstream) throws IOException {
  165. if (encoding == null || encoding.length() == 0) {
  166. encoding = "UTF-8";
  167. }
  168. OutputFormat outputFormat = new OutputFormat();
  169. outputFormat.setEncoding(encoding);
  170. XMLWriter xmlWriter = new XMLWriter(outputstream, outputFormat);
  171. xmlWriter.write(doc);
  172. xmlWriter.close();
  173. outputstream.close();
  174. }
  175.  
  176. public static Document loadXMLFile(String strFileName)
  177. throws DocumentException {
  178. SAXReader saxReader = new SAXReader();
  179. saxReader.setValidation(false);
  180. saxReader.setEntityResolver(new IgnoreDTDEntityResolver());
  181. return saxReader.read(new File(OSUtil.convert2linuxPath(strFileName)));
  182. }
  183.  
  184. public static Document loadXMLInputstream(InputStream in){
  185. SAXReader reader = new SAXReader();
  186. try {
  187. return reader.read(in);
  188. } catch (DocumentException e) {
  189. return null;
  190. }
  191. }
  192.  
  193. /**
  194. * 用于xml 与 xsl 的归并输出含处理指令的xml到out
  195. * 处理指令指定了浏览器渲染的时候使用的xsl文件相对路径
  196. *
  197. * @author sun
  198. */
  199. @SuppressWarnings("unchecked")
  200. public static void outputXML(Document xmldoc, String xslname,
  201. Writer out) throws Exception {
  202. if (xslname != null) {
  203. ProcessingInstruction pi = DocumentHelper
  204. .createProcessingInstruction("xml-stylesheet", "href=\""
  205. + xslname + "\" type=\"text/xsl\"");
  206. xmldoc.content().add(0, pi);
  207. }
  208. TransformerFactory factory = TransformerFactory.newInstance();
  209. Transformer transformer = factory.newTransformer();
  210. transformer.setOutputProperty("encoding", "UTF-8");
  211.  
  212. transformer
  213. .transform(new DocumentSource(xmldoc), new StreamResult(out));
  214. out.flush();
  215. out.close();
  216. }
  217.  
  218. /**
  219. * 用于xml 与 xsl 的归并输出xml或html到out
  220. * 输出html时,xsl名称不能为null
  221. * @author
  222. * @throws TransformerException
  223. */
  224. public static void transformXml(Document xmldoc, String xslname,
  225. Writer out) throws TransformerException{
  226. TransformerFactory factory = TransformerFactory.newInstance();
  227. Transformer transformer = xslname == null ? factory.newTransformer()
  228. : factory.newTransformer(new StreamSource(xslname));
  229. transformer.setOutputProperty("encoding", "UTF-8");
  230.  
  231. transformer.transform(new DocumentSource(xmldoc),
  232. new StreamResult(out));
  233. }
  234. }

Java操作XML的工具类的更多相关文章

  1. 最全的Java操作Redis的工具类,使用StringRedisTemplate实现,封装了对Redis五种基本类型的各种操作!

    转载自:https://github.com/whvcse/RedisUtil 代码 ProtoStuffSerializerUtil.java import java.io.ByteArrayInp ...

  2. Java操作字符串的工具类

    操作字符串的工具类 import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.PrintStre ...

  3. Java操作图片的工具类

    操作图片的工具类: import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Font; import java.a ...

  4. Java 操作jar包工具类以及如何快速修改Jar包里的文件内容

    需求背景:写了一个实时读取日志文件以及监控的小程序,打包成了Jar包可执行文件,通过我们的web主系统上传到各个服务器,然后调用ssh命令执行.每次上传前都要通过解压缩软件修改或者替换里面的配置文件, ...

  5. Java操作XML的工具:JAXB

    JavaArchitecture for XML Binding (JAXB) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术.该过程中,JAXB也提供了将XML实例文档反向 ...

  6. java操作数组的工具类-Arrays

    static int binarySearch(type[] a, type key) 使用二分搜索法来搜索key元素在数组中的索引:若a数组不包括key,返回负数.(该方法必须已按升序排列后调用). ...

  7. Java操作XML的JAXB工具

    在java中操作XML的工作中中,比较方便的工具是JAXB(Java Architecture for XML Binding). 利用这个工具很方便生成XML的tag和Java类的对应关系.参照网上 ...

  8. java里poi操作excel的工具类(兼容各版本)

    转: java里poi操作excel的工具类(兼容各版本) 下面是文件内具体内容,文件下载: import java.io.FileNotFoundException; import java.io. ...

  9. Android学习笔记之数据的Sdcard存储方法及操作sdcard的工具类

    FileService.java也就是操作sdcard的工具类: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 ...

随机推荐

  1. OC: NSString、NSArray、NSNumber

    数组参考: 参考1  参考2  参考3 //字符串 //1.获取字符串的长度: //表情符号最少占两个字节 NSString * s = @"中文字符串

  2. Release 版本和 Debug 版本

    什么是 Release 版本.Debug 版本? bug-缺陷,程序故障.而debug指的是排除缺陷,显然这个模式是面向开发者的. 而release是满足发布所用. Debug 和 Release,在 ...

  3. ActiveMQ讯息传送机制以及ACK机制详解

    [http://www.ylzx8.cn/ruanjiangongcheng/software-architecture-design/11922.html] AcitveMQ:消息存储和分发组件,涉 ...

  4. WSO2 Stratos手册

    WSO2 Stratos是最完整的企业级cloud solution,提供了一个开放的PaaS平台,相比于其他的PaaS平台来说,Stratos支持更多核心的服务.Stratos2.0对那些想从异构环 ...

  5. jquery单选框 复选框表格高亮 选中

    单选框: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/T ...

  6. Android Studio Push rejected: Push to origin/Alpha1.0 was rejected

    android studio git 右键项目, git pull 刷新选择Alpha1.0同步后,再commit and push

  7. Qt中的 Size Hints 和 Size Policies

    sizeHint 这个属性所保存的 QSize 类型的值是一个被推荐给窗口或其它组件(为了方便下面统称为widget)的尺寸,也就是说一个 widget 该有多大,它的一个参考来源就是这个 sizeH ...

  8. MySQL通配符过滤

    在WHERE后使用LIKE操作符能够进行通配符过滤: products表例如以下: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGl1eWluZ18xM ...

  9. jQuery.FlexiGrid使用总结

    经过对FlexiGrid的大量使用,及时不时琢磨下其代码,对她的脾性有了一定的了解,是该做总结的时候了. 一.FlexiGrid下载 1.原版代码 最近Paulo P. Marinas对FlexiGr ...

  10. Swift用UIBezierPath来画圆角矩形、自定义多路径图形

    最好的特点就是可以自定义路径,设置圆角和描边都很方便,以下为代码和效果,均在playground中实现 1.首先实现一个圆角矩形,并对此路径描边,为其绘制一个轮廓. 1 2 3 4 5 6 7 8 9 ...