import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.StringWriter;
import java.io.Writer; import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource; import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.ProcessingInstruction;
import org.dom4j.io.DocumentSource;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter; public class XMLUtil {
/**
* 以编码为UTF-8的方式返回xml
* @param doc Document
* @return String
*/
public static String toString(Document doc) {
return toString(doc, "UTF-8");
} /**
* 以指定编码格式返回xml
* @param doc Document
* @param encoding String
* @return String
*/
public static String toString(Document doc, String encoding) {
if (null != doc) {
OutputFormat outputFormat = new OutputFormat();
outputFormat.setEncoding(encoding);
StringWriter stringWriter = new StringWriter();
XMLWriter xmlWriter = new XMLWriter(stringWriter, outputFormat);
try {
xmlWriter.write(doc);
return stringWriter.toString();
} catch (IOException ex) {
return "";
}
} else {
return "";
}
} private static String converPath( String path ){
if(OSUtil.LIUNX.equals(System.getProperty("os.name"))){
path = OSUtil.convert2linuxPath(path) ;
System.out.println( "system is Linux , path conver to :" + path );
}
return path ;
} /**
* 创建xml格式的文件
* @param doc
* @param encoding
* @param strFileName
* @return
*/
public static boolean saveXMLDocumentToFile(Document doc, String encoding, String strFileName) {
boolean flag = false;
// 创建路径
strFileName = converPath(strFileName);
String strDir = FileNameUtil.extractFilePath(strFileName);
DirectoryUtil.forceDirectory(strDir); if (encoding == null || encoding.length() == 0) {
encoding = "UTF-8";
}
OutputFormat outputFormat = new OutputFormat();
outputFormat.setEncoding(encoding);
FileOutputStream fos = null;
XMLWriter xmlWriter = null;
try {
// FileWriter fileWriter = new FileWriter(strFileName);
// XMLWriter xmlWriter = new XMLWriter(fileWriter, outputFormat);//
// 不能解决UTF-8编码问题
fos = new FileOutputStream(strFileName);// 可解决UTF-8编码问题
xmlWriter = new XMLWriter(fos, outputFormat);
xmlWriter.write(doc);
flag = true;
} catch (IOException e) {
flag = false;
System.out.println("保存xml文件出错:" + e.getMessage());
e.printStackTrace();
} finally {
try {
if (xmlWriter != null) {
xmlWriter.flush();
}
if (fos != null) {
fos.flush();
}
if (xmlWriter != null) {
xmlWriter.close();
}
if (fos != null) {
fos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return flag;
} /**
* 创建格式化过的xml格式的文件
* @param doc
* @param encoding
* @param strFileName
* @return
*/
public static boolean saveFormatXMLDocumentToFile(Document doc, String encoding,
String strFileName) {
boolean flag = false; // 创建路径
strFileName = converPath(strFileName);
String strDir = FileNameUtil.extractFilePath(strFileName) ;
DirectoryUtil.forceDirectory(strDir); if (encoding == null || encoding.length() == 0) {
encoding = "UTF-8";
}
OutputFormat outputFormat = OutputFormat.createPrettyPrint();
outputFormat.setEncoding(encoding);
FileOutputStream fos = null;
XMLWriter xmlWriter = null;
try{
fos = new FileOutputStream(strFileName);// 可解决UTF-8编码问题
xmlWriter = new XMLWriter(fos, outputFormat);
xmlWriter.write(doc);
flag = true;
}catch(IOException e){
flag = false;
}finally{
try {
xmlWriter.flush();
fos.flush();
xmlWriter.close();
fos.close();
} catch (IOException e) {
e.printStackTrace();
} }
return flag;
} public static void saveXMLDocumentToOutputStream(Document doc,
String encoding, OutputStream outputstream) throws IOException {
if (encoding == null || encoding.length() == 0) {
encoding = "UTF-8";
}
OutputFormat outputFormat = new OutputFormat();
outputFormat.setEncoding(encoding);
XMLWriter xmlWriter = new XMLWriter(outputstream, outputFormat);
xmlWriter.write(doc);
xmlWriter.close();
outputstream.close();
} public static Document loadXMLFile(String strFileName)
throws DocumentException {
SAXReader saxReader = new SAXReader();
saxReader.setValidation(false);
saxReader.setEntityResolver(new IgnoreDTDEntityResolver());
return saxReader.read(new File(OSUtil.convert2linuxPath(strFileName)));
} public static Document loadXMLInputstream(InputStream in){
SAXReader reader = new SAXReader();
try {
return reader.read(in);
} catch (DocumentException e) {
return null;
}
} /**
* 用于xml 与 xsl 的归并输出含处理指令的xml到out
* 处理指令指定了浏览器渲染的时候使用的xsl文件相对路径
*
* @author sun
*/
@SuppressWarnings("unchecked")
public static void outputXML(Document xmldoc, String xslname,
Writer out) throws Exception {
if (xslname != null) {
ProcessingInstruction pi = DocumentHelper
.createProcessingInstruction("xml-stylesheet", "href=\""
+ xslname + "\" type=\"text/xsl\"");
xmldoc.content().add(0, pi);
}
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer();
transformer.setOutputProperty("encoding", "UTF-8"); transformer
.transform(new DocumentSource(xmldoc), new StreamResult(out));
out.flush();
out.close();
} /**
* 用于xml 与 xsl 的归并输出xml或html到out
* 输出html时,xsl名称不能为null
* @author
* @throws TransformerException
*/
public static void transformXml(Document xmldoc, String xslname,
Writer out) throws TransformerException{
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = xslname == null ? factory.newTransformer()
: factory.newTransformer(new StreamSource(xslname));
transformer.setOutputProperty("encoding", "UTF-8"); transformer.transform(new DocumentSource(xmldoc),
new StreamResult(out));
}
}

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. SharePoint 2013 自定义翻页显示列表项

    项目需求:自定义开发一个能分页显示列表项的小部件,允许左右翻页,能根据用户权限来显示管理链接等. 效果如下: 技术要求:使用sharepoint rest API 来获取列表项,这样性能高,能够快速响 ...

  2. C:进制

     进制.C语言内存分配 1.对于进制 10进制 (0 - 9)16进制 (0——9 A B C D E F)硬件中的高低电平(0 和 1表示)所以计算机用 二进制 机器语言就是由 0 和 1 组成的一 ...

  3. PHP高级应用视频教程大全学习

    php 是一种服务器端的,嵌入html的脚本语言.php区别其他像客户端java的地方是它的代码在服务器端执行.php能做什么?最低水平,php可以做任何其他cgi程序所能做的事,例如收集表格数据,生 ...

  4. libev笔记

    libev是一个开源库,实现了一个reactor模式事件驱动任务调度库.代码非常精简,包含所有实现的.c文件只有不到5000行. 支持的事件类型: ev_io ev_timer ev_periodic ...

  5. 数据库 SQL :有关 NULL 值引发 TRUE、FALSE、UNKNOW 三值逻辑

    在 Java.C# 中,相信如果是 boolean 类型值,只有两种选择 true.false.然而,在 SQL 查询中,NULL 值的引入,使得新增了 UNKNOW ,因此,就产生了 TRUE.FA ...

  6. Swift学习笔记十四

    Deinitialization 当类的实例对象即将要被释放时,会立即调用deinitializer,通过deinit关键字来定义deinitializer,和initializer一样,它也只存在于 ...

  7. 搭建Spring + SpringMVC + Mybatis框架之二(整合Spring和Mybatis)

    整合Spring和Mybatis 首先给出完整的项目目录: (1)引入项目需要的jar包 使用http://maven.apache.org作为中央仓库即可. Spring核心包,mybatis核心包 ...

  8. linux C 快速排序法

    #include <stdio.h> // 数组长度 #define LENGTH(array) ( (sizeof(array)) / (sizeof(array[0])) ) /* * ...

  9. [Node.js] Level 7. Persisting Data

    Simple Redis Commands Let's start practicing using the redis key-value store from our node applicati ...

  10. 关于ASP.NET中Button的OnClientClick属性

    Button有Click属性和OnClientClick属性,执行顺序上OnClientClick先执行,调用本地脚本,根据返回值确定是否执行Click. 当返回True则执行Click,当脚本错误或 ...