`
kingxss
  • 浏览: 973880 次
  • 性别: 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
分享到:
评论

相关推荐

    dom4j以String的方式读取XML的内容,并给String的值赋值,写入XML中

    要将XML文件读取为String,首先需要创建一个`Document`对象,这是DOM4J的核心数据结构,代表整个XML文档。可以使用`DocumentHelper`类的静态方法`parseText()`或`readFile()`来完成这个任务。例如: ```java ...

    DOMParser解析xml

    DOMParser是JavaScript中处理XML文档的主要工具,它允许我们将XML数据转换为DOM(Document Object Model)对象,从而方便我们通过编程方式访问和操作XML内容。 DOM是一种树型结构,将XML文档中的每个元素、属性和...

    DOM读取XML文件

    在Android开发中,DOM(Document Object Model)解析是一种常见的处理XML文件的方式。DOM解析器将整个XML文件加载到内存中,形成一个树形结构,允许开发者通过节点操作来访问和修改XML文档。这种方式的优点在于方便...

    pb下读写xml文件的例子.rar_pb_pb 读取xml_pb 读取xml文件_pb9 xml_pb下读写xml文件的例子

    总结,PowerBuilder 9为处理XML文件提供了强大的支持,通过XMLDocument对象和DOM解析器,我们可以轻松地读取、写入和操作XML数据。这些功能使PB9成为开发涉及XML的应用的理想工具,帮助开发者高效地完成数据交换和...

    用dom解析xml文件

    6. 保存修改:如果你对XML进行了修改,可以使用`Transformer`将`Document`对象转换回XML字符串或写入文件。 ```java TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer ...

    android Dom解析xml文件

    DOM解析是一种将XML文件转换为内存中对象模型的方法。它将XML文档视为一棵树,其中每个元素、属性和文本节点都是树上的一个节点。通过遍历这个树,可以轻松地访问和修改XML数据。 ### 2. Android中的DOM解析库 在...

    dom4j解析xml文件的压缩包

    8. **转换与格式化**:DOM4J可以将XML Document对象转换为String或OutputStream,同时提供XML格式化的功能,使得输出的XML更易于阅读。 9. **JAXB集成**:DOM4J可以与Java的默认XML绑定框架JAXB进行集成,方便地将...

    DOM解析xml文件实例讲解

    在Android开发中,DOM(Document Object Model)解析是处理XML文档的一种常见方法,它提供了一种结构化的表示XML文档的方式,并允许开发者通过编程接口与XML数据进行交互。本篇文章将深入探讨DOM解析XML文件在...

    Android使用DOM方式解析XML

    本篇文章将深入探讨如何使用DOM(文档对象模型)解析XML文件,并将其内容显示在应用程序的用户界面上。 首先,理解DOM解析的基本概念至关重要。DOM是一种标准,允许程序以树形结构访问和操作XML文档的全部内容。它...

    用DOM读写XML文件

    写入XML文件时,我们需要创建一个新的`Document`对象,添加元素和属性,然后使用`Transformer`将`Document`对象转换回XML字符串。以下是一个示例: ```java // 创建新的Document对象 Document doc = ...

    dom4j解析xml文件代码示例

    在本示例中,我们将深入探讨如何使用DOM4J解析XML文件,以`CacheInit.java`作为我们的核心代码示例,并参考`emailTemplateConfig.xml`作为实际操作的对象。 首先,让我们了解XML(eXtensible Markup Language)。...

    字符串转化为XML文件

    SaveMesToXML方法首先将字符串加载到XmlDocument对象中,然后将XmlDocument对象保存到文件中。SaveMesToXML方法返回保存的文件名。 其他知识点 * regional directive:#region和#endregion是C#中的 regional ...

    dom4j读写xml文件

    1. **解析XML文件**:使用DOM4J的`DocumentHelper`类的`parseText()`或`parse()`方法,可以将XML文件加载为一个`Document`对象。例如: ```java Document document = DocumentHelper.parseText(xmlString); ``` ...

    java平台中使用DOM解析xml文件

    DOM(Document Object Model)是处理XML的一种方法,它将XML文档转换为一个树形结构,允许开发者通过编程方式访问和修改XML文档的任何部分。在Java平台上,DOM解析器提供了对XML文档的全面和结构化的访问。 使用DOM...

    android dom方式解析xml

    总的来说,DOM解析方式在Android中适用于小型或中型XML文件,因为它将整个XML加载到内存,可以快速访问任何节点,但不适合处理大型XML文件。对于大型文件,更推荐使用SAX(Simple API for XML)或Pull解析器,它们以...

    使用dom4j将xml字符串转换成Bean对象

    总结来说,dom4j提供了一种简洁的方式将XML字符串转换为Java Bean对象。通过创建一个工具类,我们可以定义一个通用的方法,根据XML结构自动填充Bean的属性。这种方式在处理XML数据到Java对象的映射时非常实用。在...

    XML文件DOM方式解析

    XML文件DOM方式解析是一种在Java或其它编程语言中处理XML数据的常见方法。XML(Extensible Markup Language)是一种用于标记数据的语言,广泛应用于数据交换、配置文件和文档存储等领域。DOM解析器则提供了对XML文档...

    java_dom解析xml xml java

    - DOM解析器负责将XML文档转换为DOM树结构,以便于程序可以访问和操作文档中的各个元素。 - 通常使用`DocumentBuilderFactory`和`DocumentBuilder`两个类来创建DOM解析器。 2. **DOM树** - DOM树是XML文档的一种...

    xml解析 dom方式 例子和讲解

    DOM(Document Object Model)是XML解析的一种常见方式,它将XML文档视为一个树形结构,允许开发者通过节点操作来读取、修改或遍历XML数据。 在Java中,DOM解析通常涉及以下关键步骤: 1. **导入库**:使用DOM解析...

    dom4j自动解释xml文件

    递归解析XML文件的核心在于一个递归函数,它接受当前的`Element`节点作为参数,然后对每个子元素进行处理。对于每个元素,可以读取其属性值,获取文本内容,或者进一步递归调用自身处理子元素。以下是一个简化的示例...

Global site tag (gtag.js) - Google Analytics