DOM方式进行的XML文件、Document、String之间的相互转换

29 篇文章 1 订阅

http://kingxss.iteye.com/blog/1026954

XML文件test.xml:

Xml代码
<?xml version="1.0" encoding="UTF-8"?><books><book><name>哈里波特</name><price>10</price><memo>这是一本很好看的书。</memo></book></books>  

 

java代码:

Java代码
import java.io.*;   
  1. import java.net.URI;   
  2.   
  3. import javax.xml.parsers.*;   
  4. import javax.xml.transform.*;   
  5. import javax.xml.transform.dom.DOMSource;   
  6. import javax.xml.transform.stream.StreamResult;   
  7.   
  8. import org.w3c.dom.Document;   
  9. import org.xml.sax.InputSource;   
  10.   
  11. import com.sun.org.apache.xml.internal.serialize.*;   
  12.   
  13. /**  
  14.  * DOM方式操作XML  
  15.  *   
  16.  * @author Watson Xu  
  17.  * @date 2011-5-3 上午09:49:27  
  18.  */  
  19. public class OperateXMLByDOM {   
  20.     /**  
  21.      * 将给定文件的内容或者给定 URI 的内容解析为一个 XML 文档,并且返回一个新的 DOM Document 对象  
  22.      *   
  23.      * @param filePath 文件所在路径  
  24.      * @return DOM的Document对象  
  25.      * @throws Exception  
  26.      */  
  27.     public static Document xml2Doc(String filePath) {   
  28.         DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();   
  29.         DocumentBuilder builder = null;   
  30.         FileInputStream inputStream = null;   
  31.         Document doc = null;   
  32.         try {   
  33.             builder = factory.newDocumentBuilder();   
  34.   
  35.             /* 通过文件方式读取,注意文件保存的编码和文件的声明编码要一致(默认文件声明是UTF-8) */  
  36.             File file = new File(filePath);   
  37.             doc = builder.parse(file);   
  38.   
  39.             /* 通过一个URL方式读取 */  
  40.             URI uri = new URI(filePath);//filePath="http://java.sun.com/index.html"   
  41.             doc = builder.parse(uri.toString());   
  42.   
  43.             /* 通过java IO 流的读取 */  
  44.             inputStream = new FileInputStream(filePath);   
  45.             doc = builder.parse(inputStream);   
  46.             return doc;   
  47.         } catch (Exception e) {   
  48.             return null;   
  49.         } finally {   
  50.             if (inputStream != null) {   
  51.                 try {   
  52.                     inputStream.close();   
  53.                 } catch (IOException e) {   
  54.                     return null;   
  55.                 }   
  56.             }   
  57.         }   
  58.     }   
  59.   
  60.     /**  
  61.      * Document 转换为 String 并且进行了格式化缩进  
  62.      *   
  63.      * @param doc XML的Document对象  
  64.      * @return String  
  65.      */  
  66.     public static String doc2FormatString(Document doc) {          
  67.         StringWriter stringWriter = null;   
  68.         try {   
  69.             stringWriter = new StringWriter();   
  70.             if(doc != null){   
  71.                 OutputFormat format = new OutputFormat(doc,"UTF-8",true);   
  72.                 //format.setIndenting(true);//设置是否缩进,默认为true   
  73.                 //format.setIndent(4);//设置缩进字符数   
  74.                 //format.setPreserveSpace(false);//设置是否保持原来的格式,默认为 false   
  75.                 //format.setLineWidth(500);//设置行宽度   
  76.                 XMLSerializer serializer = new XMLSerializer(stringWriter,format);   
  77.                 serializer.asDOMSerializer();   
  78.                 serializer.serialize(doc);   
  79.                 return stringWriter.toString();   
  80.             } else {   
  81.                 return null;   
  82.             }   
  83.         } catch (Exception e) {   
  84.             return null;   
  85.         } finally {   
  86.             if(stringWriter != null){   
  87.                 try {   
  88.                     stringWriter.close();   
  89.                 } catch (IOException e) {   
  90.                     return null;   
  91.                 }   
  92.             }   
  93.         }   
  94.     }   
  95.        
  96.     /**  
  97.      * Document 转换为 String  
  98.      *   
  99.      * @param doc XML的Document对象  
  100.      * @return String  
  101.      */  
  102.     public static String doc2String(Document doc){   
  103.         try {   
  104.             Source source = new DOMSource(doc);   
  105.             StringWriter stringWriter = new StringWriter();   
  106.             Result result = new StreamResult(stringWriter);   
  107.             TransformerFactory factory = TransformerFactory.newInstance();   
  108.             Transformer transformer = factory.newTransformer();   
  109.             transformer.setOutputProperty(OutputKeys.INDENT, "yes");   
  110.             transformer.transform(source, result);   
  111.             return stringWriter.getBuffer().toString();   
  112.         } catch (Exception e) {   
  113.             return null;   
  114.         }   
  115.     }   
  116.   
  117.     /**  
  118.      * String 转换为 Document 对象  
  119.      *   
  120.      * @param xml 字符串  
  121.      * @return Document 对象  
  122.      */  
  123.     public static Document string2Doc(String xml) {   
  124.         DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();   
  125.         DocumentBuilder builder = null;   
  126.         Document doc = null;   
  127.         InputSource source = null;   
  128.         StringReader reader = null;   
  129.         try {   
  130.             builder = factory.newDocumentBuilder();   
  131.             reader = new StringReader(xml);   
  132.             source = new InputSource(reader);//使用字符流创建新的输入源   
  133.             doc = builder.parse(source);   
  134.             return doc;   
  135.         } catch (Exception e) {   
  136.             return null;   
  137.         } finally {   
  138.             if(reader != null){   
  139.                 reader.close();   
  140.             }   
  141.         }   
  142.     }   
  143.   
  144.     /**  
  145.      * Document 保存为 XML 文件  
  146.      *   
  147.      * @param doc Document对象  
  148.      * @param path 文件路径  
  149.      */  
  150.     public static void doc2XML(Document doc, String path) {   
  151.         try {   
  152.             Source source = new DOMSource(doc);   
  153.             Result result = new StreamResult(new File(path));   
  154.             Transformer transformer = TransformerFactory.newInstance().newTransformer();   
  155.             transformer.setOutputProperty(OutputKeys.INDENT, "yes");   
  156.             transformer.transform(source, result);   
  157.         } catch (Exception e) {   
  158.             return;   
  159.         }   
  160.     }   
  161.   
  162.     public static void main(String[] args) {   
  163.         Document doc = xml2Doc("test.xml");   
  164.         System.out.println(doc);   
  165.         System.out.println(doc2String(doc));   
  166.         System.out.println(doc2FormatString(doc));   
  167.         doc = string2Doc(doc2FormatString(doc));   
  168.         doc2XML(doc, "1.xml");   
  169.     }   
  170. }  
import java.io.*;
import java.net.URI;

import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.xml.sax.InputSource;

import com.sun.org.apache.xml.internal.serialize.*;

/**
 * DOM方式操作XML
 * 
 * @author Watson Xu
 * @date 2011-5-3 上午09:49:27
 */
public class OperateXMLByDOM {
	/**
	 * 将给定文件的内容或者给定 URI 的内容解析为一个 XML 文档,并且返回一个新的 DOM Document 对象
	 * 
	 * @param filePath 文件所在路径
	 * @return DOM的Document对象
	 * @throws Exception
	 */
	public static Document xml2Doc(String filePath) {
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		DocumentBuilder builder = null;
		FileInputStream inputStream = null;
		Document doc = null;
		try {
			builder = factory.newDocumentBuilder();

			/* 通过文件方式读取,注意文件保存的编码和文件的声明编码要一致(默认文件声明是UTF-8) */
			File file = new File(filePath);
			doc = builder.parse(file);

			/* 通过一个URL方式读取 */
			URI uri = new URI(filePath);//filePath="http://java.sun.com/index.html"
			doc = builder.parse(uri.toString());

			/* 通过java IO 流的读取 */
			inputStream = new FileInputStream(filePath);
			doc = builder.parse(inputStream);
			return doc;
		} catch (Exception e) {
			return null;
		} finally {
			if (inputStream != null) {
				try {
					inputStream.close();
				} catch (IOException e) {
					return null;
				}
			}
		}
	}

	/**
	 * Document 转换为 String 并且进行了格式化缩进
	 * 
	 * @param doc XML的Document对象
	 * @return String
	 */
	public static String doc2FormatString(Document doc) {		
		StringWriter stringWriter = null;
		try {
			stringWriter = new StringWriter();
			if(doc != null){
				OutputFormat format = new OutputFormat(doc,"UTF-8",true);
				//format.setIndenting(true);//设置是否缩进,默认为true
				//format.setIndent(4);//设置缩进字符数
				//format.setPreserveSpace(false);//设置是否保持原来的格式,默认为 false
				//format.setLineWidth(500);//设置行宽度
				XMLSerializer serializer = new XMLSerializer(stringWriter,format);
				serializer.asDOMSerializer();
				serializer.serialize(doc);
				return stringWriter.toString();
			} else {
				return null;
			}
        } catch (Exception e) {
        	return null;
        } finally {
        	if(stringWriter != null){
	        	try {
					stringWriter.close();
				} catch (IOException e) {
					return null;
				}
        	}
        }
	}
	
	/**
	 * Document 转换为 String
	 * 
	 * @param doc XML的Document对象
	 * @return String
	 */
	public static String doc2String(Document doc){
		try {
			Source source = new DOMSource(doc);
	        StringWriter stringWriter = new StringWriter();
	        Result result = new StreamResult(stringWriter);
	        TransformerFactory factory = TransformerFactory.newInstance();
	        Transformer transformer = factory.newTransformer();
	        transformer.setOutputProperty(OutputKeys.INDENT, "yes");
	        transformer.transform(source, result);
	        return stringWriter.getBuffer().toString();
		} catch (Exception e) {
			return null;
		}
	}

	/**
	 * String 转换为 Document 对象
	 * 
	 * @param xml 字符串
	 * @return Document 对象
	 */
	public static Document string2Doc(String xml) {
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		DocumentBuilder builder = null;
		Document doc = null;
		InputSource source = null;
		StringReader reader = null;
		try {
			builder = factory.newDocumentBuilder();
			reader = new StringReader(xml);
			source = new InputSource(reader);//使用字符流创建新的输入源
			doc = builder.parse(source);
			return doc;
		} catch (Exception e) {
			return null;
		} finally {
			if(reader != null){
				reader.close();
			}
		}
	}

	/**
	 * Document 保存为 XML 文件
	 * 
	 * @param doc Document对象
	 * @param path 文件路径
	 */
	public static void doc2XML(Document doc, String path) {
		try {
			Source source = new DOMSource(doc);
	        Result result = new StreamResult(new File(path));
	        Transformer transformer = TransformerFactory.newInstance().newTransformer();
	        transformer.setOutputProperty(OutputKeys.INDENT, "yes");
	        transformer.transform(source, result);
		} catch (Exception e) {
			return;
		}
	}

	public static void main(String[] args) {
		Document doc = xml2Doc("test.xml");
		System.out.println(doc);
		System.out.println(doc2String(doc));
		System.out.println(doc2FormatString(doc));
		doc = string2Doc(doc2FormatString(doc));
		doc2XML(doc, "1.xml");
	}
}

 

 

输出的XML文件1.xml:

Xml代码
  1. <?xml version="1.0" encoding="UTF-8" standalone="no"?>  
  2. <books>  
  3.     <book>  
  4.         <name>哈里波特</name>  
  5.         <price>10</price>  
  6.         <memo>这是一本很好看的书。</memo>  
  7.     </book>  
  8. </books>  

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值