Java操作XML的工具类
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的工具类的更多相关文章
- 最全的Java操作Redis的工具类,使用StringRedisTemplate实现,封装了对Redis五种基本类型的各种操作!
转载自:https://github.com/whvcse/RedisUtil 代码 ProtoStuffSerializerUtil.java import java.io.ByteArrayInp ...
- Java操作字符串的工具类
操作字符串的工具类 import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.PrintStre ...
- Java操作图片的工具类
操作图片的工具类: import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Font; import java.a ...
- Java 操作jar包工具类以及如何快速修改Jar包里的文件内容
需求背景:写了一个实时读取日志文件以及监控的小程序,打包成了Jar包可执行文件,通过我们的web主系统上传到各个服务器,然后调用ssh命令执行.每次上传前都要通过解压缩软件修改或者替换里面的配置文件, ...
- Java操作XML的工具:JAXB
JavaArchitecture for XML Binding (JAXB) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术.该过程中,JAXB也提供了将XML实例文档反向 ...
- java操作数组的工具类-Arrays
static int binarySearch(type[] a, type key) 使用二分搜索法来搜索key元素在数组中的索引:若a数组不包括key,返回负数.(该方法必须已按升序排列后调用). ...
- Java操作XML的JAXB工具
在java中操作XML的工作中中,比较方便的工具是JAXB(Java Architecture for XML Binding). 利用这个工具很方便生成XML的tag和Java类的对应关系.参照网上 ...
- java里poi操作excel的工具类(兼容各版本)
转: java里poi操作excel的工具类(兼容各版本) 下面是文件内具体内容,文件下载: import java.io.FileNotFoundException; import java.io. ...
- 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 ...
随机推荐
- spring4 定时任务
一.spring 定时任务 spring 定时任务 ,最好使用quartz 实现.下面我以spring4为例 二.实战(默认) 1.pom配置 <!-- spring time task --& ...
- gitignore无效最简单解决办法
git rm --cached 文件或者文件夹 git commit 提交 git push 提交
- android自定义相册 支持低端机不内存溢出
1 之前在网上看的自定义相册很多时候在低端机都会内存溢出开始上代码把 首先我们要拿到图片的所有路径 cursor = context.getContentResolver().query( Media ...
- Linux下getopt()函数的简单使用
最近在弄Linux C编程,本科的时候没好好学啊,希望学弟学妹们引以为鉴. 好了,虽然啰嗦了点,但确实是忠告.步入正题: 我们的主角----getopt()函数. 英雄不问出处,getopt()函数的 ...
- Swift 实现Bitmask Option(Enum)
在Swift中实现ObjC中的NS_OPTION不是通过enum,而是通过conform RawOptionSetType protocol的struct来实现的. 代码如下: struct Test ...
- ubuntu: qemu+gdb 调试linux kernel 学习笔记
声明: 本笔记内容并非本人原创,90%来自网络资料的整合.同时,由于自己是刚刚接触qemu & gdbserver remote debug,本文也就算不得教程,仅供有缘人参考而已. ---- ...
- WinSock异步IO模型之Select
如果你想在Windows平台上构建服务器应用,那么I/O模型是你必须考虑的. Windows操作系统提供了五种I/O模型,分别是: ■ 选择(select): ■ 异步选择(WSAAsyncSelec ...
- jQuery hover事件鼠标滑过图片半透明标题文字滑动显示隐藏
1.效果及功能说明 hover事件制作产品图片鼠标滑过图片半透明,标题文字从左到右滑动动画移动显示隐藏 2.实现原理 首先把效果都隐藏,然后定义一个伪类来触发所有的效果,接下来当触发伪类后会有一个遍历 ...
- WEB的相关知识总结
JS-->OOP/Module, DOM, JSON, AJAX------------------><script>, script.js的内容 HTML/JS/CSS HT ...
- [Angular2 Form] Understand the Angular 2 States of Inputs: Pristine and Untouched
Angular 2’s ngModel exposes more than just validity, it even gives you the states of whether the inp ...