`
kingxss
  • 浏览: 969292 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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

    博客分类:
  • XML
阅读更多

XML文件test.xml:

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

java代码:

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 version="1.0" encoding="UTF-8" standalone="no"?>
<books>
    <book>
        <name>哈里波特</name>
        <price>10</price>
        <memo>这是一本很好看的书。</memo>
    </book>
</books>
 
4
10
分享到:
评论

相关推荐

    Java读取XML文件自制工具类

    用WC3的DOM实现对XML文件的读取。 方法摘要: //通过文件路径及文件名读取xml public XMLReader(String path, String filename); //初始化读取包下的的XML文件 public XMLReader(Package package1, String fileName)...

    生成XML文件ABAP程序

    生成XML文件ABAP程序 REPORT zams_xml_dom_create . TYPE-POOLS: ixml. CLASS cl_ixml DEFINITION LOAD. TYPES: BEGIN OF xml_line, data(256) TYPE x, END OF xml_line. DATA: l_ixml TYPE REF TO if_ixml, ...

    dom4j解析xml字符串

    // SAXReader就是一个管道,用一个流的方式,把xml文件读出来 // // SAXReader reader = new SAXReader(); //User.hbm.xml表示你要解析的xml文档 // Document document = reader.read(new File("User.hbm.xml")...

    dom4j生成xml

    该项目采用dom4j从数据库表中生成xml数据 项目文档、数据库建表语句均已放置在项目中。 关键代码如下: public String getXml(Connection conn, int rm_id, String path) { //声明xml字符串 String file...

    使用dom4j读写XML文档

    使用dom4j读写XML文档 1.获取文档的根节点. Element rootElm = document.getRootElement(); 2.取得某节点的单个子节点. Element memberElm=root.element("member");// "member"是节点名 3.取得节点的文字 String ...

    使用dom4j.doc

    1.读取XML文件,获得document对象. SAXReader reader = new SAXReader(); Document document = reader.read(new File("input.xml")); 2.解析XML形式的文本,得到document对象. String text = "&lt;members&gt;&lt;/...

    android xml文件操作

    根据xml文件的名字获取Document对象。 * * @param file * 要获取对象的xml文件全路径。 * @return 返回获取到的Document对象。 * @throws IOException * 如果发生任何 IO 错误时抛出此异常。 * @...

    DWR.xml配置文件说明书(含源码)

    因为没有办法完全自动进行转换,我们可以应用dwr.xml文件的special signatures syntax配置部分设置类型的转换处理过程. 2.5 DOM Objects DWR 自动将DOM、DOM4J、JDOM和XOM转换成DOM树,前面这几种类型都仅仅返回...

    Java解析XML工具类--(java源码)

    public static Document parse( String xmlFile ) throws Exception { // 绑定XML文件,建造DOM树 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf....

    dom4j-2.1.0.jar

    dom4j目前我用过这个jar包解析过XML中的CDATA,其他的还在学习中。 我的代码: public static String GetCDATA(String strXml) { SAXReader reader = new SAXReader(); String strJson = "[]"; try { Document ...

    dom4j

    } &lt;br&gt; /** * 修改XML文件中内容,并另存为一个新文件 * 重点掌握dom4j中如何添加节点,修改节点,删除节点 * @param filename 修改对象文件 * @param newfilename 修改后另存为该文件 * @...

    xml入门教程/xml入门教程

    XSLT,是用于对XML进行文档格式转换,把一个XML文档转换成另一种格式的XML文档,但是其中内容是不变的。 &2.DTD(Document Type Difinition DTD文档是用于规定XML文档的结构。只有结构符合所引用的DTD文件的XML文件...

    php xml常用函数的集合(比较详细)

    a、DOMDocument-&gt;load()作用:加载xml文件用法:DOMDocument-&gt;load( string filename )参数:filename,xml文件;返回:如果成功则返回 TRUE,失败则返回 FALSE。 b、DOMDocument-&gt;loadXML()作用:加载xml代码用法:...

    Tinyxml 源代码(VC6 & VS2005)

    TinyXML支持UTF-8,所以可以处理任何语言的XML文件,而且TinyXML也支持“legacy模式”——一种在支持UTF-8之前使用的编码方式,可能最好的解释是“扩展的ascii”。 正常情况下,TinyXML会检测出正确的编码并使用它...

    Dm4J操作xml文件.rar

    自己写的一个操作xml文件的类,可以把节点存入实体对象,也可以把实体对象插入xml文件,以及很多查询方法 返回类型全是String或List&lt;String&gt;、Map&lt;String,String&gt;等

    dom4-j1.6.1

    1.读取XML文件,获得document对象. SAXReader reader = new SAXReader(); Document document = reader.read(new File&#40;"input.xml"&#41;); 2.解析XML形式的文本,得到document对象. String text = "&lt;members&gt;&lt;/...

    java解析xml

    // 把要解析的XML文档转化为输入流,以便DOM解析器解析它 InputStream is = new FileInputStream("test.xml"); // 解析XML文档的输入流,得到一个Document Document doc = dombuilder.parse(is); // 得到XML...

    xmldom:基于纯 JavaScript W3C 标准(XML DOM Level 2 Core)的 DOMParser 和 XMLSerializer 模块

    XMLDOM xmldom 是一个 javascript 用于浏览器支持的以下 API: 将 XML 字符串转换为 DOM 树( new DOMParser().parseFromString(xml, mimeType) =&gt; Document ) 创建、访问和修改 DOM 树( new DOMImplementation()....

    dom4j-jdom封装和解析例子

    String fromRead=Dom4jTest2.class.getClassLoader().getResource("xml/map1.xml").getPath(); List&lt;Pois&gt; list=new ArrayList(); SAXReader saxReader = new SAXReader(); org.dom4j.Document document=...

    day023-xml解析笔记和代码.rar

    SAXReader对象调用read方法,将当前XML文件,转换为Document对象 document = reader.read(file); 4. 获取根节点 root = document.getRootElement(); 5. 通过父签添加子标签(元素) ...

Global site tag (gtag.js) - Google Analytics