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 }
复制代码

 


本文转自SummerChill博客园博客,原文链接:http://www.cnblogs.com/DreamDrive/p/5762605.html,如需转载请自行联系原作者

相关文章
|
1月前
|
XML C# 数据格式
使用C#操作XML文件
使用C#操作XML文件
11 0
|
1月前
|
Java
java实现遍历树形菜单方法——映射文件VoteTree.hbm.xml
java实现遍历树形菜单方法——映射文件VoteTree.hbm.xml
9 0
|
1月前
|
存储 Java 数据处理
|
29天前
Mybatis+mysql动态分页查询数据案例——分页工具类(Page.java)
Mybatis+mysql动态分页查询数据案例——分页工具类(Page.java)
21 1
|
29天前
Mybatis+mysql动态分页查询数据案例——工具类(MybatisUtil.java)
Mybatis+mysql动态分页查询数据案例——工具类(MybatisUtil.java)
15 1
|
4天前
|
安全 Java
深入理解 Java 多线程和并发工具类
【4月更文挑战第19天】本文探讨了Java多线程和并发工具类在实现高性能应用程序中的关键作用。通过继承`Thread`或实现`Runnable`创建线程,利用`Executors`管理线程池,以及使用`Semaphore`、`CountDownLatch`和`CyclicBarrier`进行线程同步。保证线程安全、实现线程协作和性能调优(如设置线程池大小、避免不必要同步)是重要环节。理解并恰当运用这些工具能提升程序效率和可靠性。
|
14天前
|
XML JSON JavaScript
Java中XML和JSON的比较与应用指南
本文对比了Java中XML和JSON的使用,XML以自我描述性和可扩展性著称,适合结构复杂、需验证的场景,但语法冗长。JSON结构简洁,适用于轻量级数据交换,但不支持命名空间。在Java中,处理XML可使用DOM、SAX解析器或XPath,而JSON可借助GSON、Jackson库。根据需求选择合适格式,注意安全、性能和可读性。
23 0
|
20天前
|
XML JSON JavaScript
使用JSON和XML:数据交换格式在Java Web开发中的应用
【4月更文挑战第3天】本文比较了JSON和XML在Java Web开发中的应用。JSON是一种轻量级、易读的数据交换格式,适合快速解析和节省空间,常用于API和Web服务。XML则提供更强的灵活性和数据描述能力,适合复杂数据结构。Java有Jackson和Gson等库处理JSON,JAXB和DOM/SAX处理XML。选择格式需根据应用场景和需求。
|
24天前
|
JSON Java 网络安全
Java使用hutool工具类发送网络请求
Java使用hutool工具类发送网络请求
41 0
|
1月前
|
自然语言处理 Java
这是什么操作?java中的变量竟然可以先使用后声明?
这是什么操作?java中的变量竟然可以先使用后声明?
14 0