`

诡异的dom4j的输出

    博客分类:
  • java
阅读更多
        昨天发现一个问题,使用dom4j的XMLWrtier输出的问题。
        首先先说一下现象吧,如果XML里面包含了一些特殊字符,比如 
 这个是line feed,也就是换行符。在经过它输出后总是会变成\n, 不好干预它的转化。下面来看具体的例子。
这个是原始的xml文件:
     
<?xml version="1.0" encoding="UTF-8"?>
<Package id = "test" name = "Test&#10;Test">
	
</Package>
        


下面是测试代码:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;

import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;

import junit.framework.Assert;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.DocumentSource;
import org.dom4j.io.XMLWriter;
import org.junit.Test;

public class TestXMLOutput {
	
	public final static String FILE_NAME = "text.xml";
	
	@Test
	public  void testDom4j() {

		Document document = createDocument();
		try {
			Element rootElement = document.getRootElement();
			String packageName = rootElement.attributeValue("name");
			
			Assert.assertEquals("Test\nTest", packageName);
			
			FileOutputStream fos = new FileOutputStream("dom4j_"+FILE_NAME);
			XMLWriter writer = new XMLWriter(fos);
			writer.setEscapeText(false);
			writer.write(document);
			
			fos.close();
			writer.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	@Test
	public void testDom(){
		Document document = createDocument();
		
		Element rootElement = document.getRootElement();
		String packageName = rootElement.attributeValue("name");
		
		Assert.assertEquals("Test\nTest", packageName);
		
		try {
			FileOutputStream fos = new FileOutputStream("dom_"+FILE_NAME);
			 // Use a Transformer for output
			 TransformerFactory tFactory =
			    TransformerFactory.newInstance();
			 Transformer transformer = tFactory.newTransformer();
			 transformer.setOutputProperty("indent","yes");
			 transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount","4");
			 transformer.setOutputProperty("encoding","UTF-8");
			 
			 DocumentSource source = new DocumentSource(document);
			 StreamResult result = new StreamResult(fos);
			 transformer.transform(source,result);
			 
			 fos.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	private Document createDocument(){
		Document document = null;
		try {
			File file = new File(FILE_NAME);
			BufferedReader reader = new BufferedReader(
					new InputStreamReader(new FileInputStream(file)));
			
			StringBuffer buffer = new StringBuffer();
			String line = "";
			while((line = reader.readLine()) != null){
				buffer.append(line);
			}
			reader.close();
			
			document = DocumentHelper.parseText(buffer.toString());
		} catch (Exception e) {
			e.printStackTrace();
		}
		return document;
	}
}


下面是dom4j的转换后的输出:

<?xml version="1.0" encoding="UTF-8"?>
<Package id="test" name="Test
Test">	</Package>


下面是transfomer的输出:
<?xml version="1.0" encoding="UTF-8"?>
<Package id="test" name="Test&#10;Test">	</Package>


大家看到效果了把,dom4j变成了 \n, 但是transfomer还是原来的格式。
如果大家谁有对这块有研究的,希望给我留言解决这个问题。

另外,我把工程上传,希望大家帮忙解决。
分享到:
评论
2 楼 asialee 2011-04-13  
kimmking 写道
试试 writer.setEscapeText(true);  

这个默认就是true的,我修改成true和false都不可以,另外escapeText是来控制
&quot; 这些转化的,不过还是谢谢。 如果干兴趣的话,可以再研究研究,
欢迎再反馈....
1 楼 kimmking 2011-04-13  
试试 writer.setEscapeText(true);  

相关推荐

    dom4j 输出XML时中文乱码解决

    Dom4J 输出 XML 时中文乱码解决方案 Dom4J 是一个流行的 Java 库,用于解析和生成 XML 文档。然而,在使用 Dom4J 输出 XML 文档时,中文字符可能会出现乱码问题。这是因为 Dom4J 的默认编码方式可能不支持中文字符...

    dom4j-2.0.3.zip

    《深入解析DOM4J——基于Java的XML处理框架》 DOM4J,作为一个强大的Java XML API,是处理XML文档的主流工具之一。它提供了一套简单而高效的方式来操作XML文档,包括读取、写入、修改和遍历XML结构。在Java开发中,...

    dom4j 2.1.1

    3. 功能强大:DOM4J不仅支持基本的XML解析,还提供了高级特性,如XPath表达式支持、SAX和DOM的集成、XML Schema验证、XML编写和输出等。XPath是一种强大的查询语言,能够方便地定位XML文档中的节点。 4. 扩展性:...

    dom4j-1.6.jar.zip

    **DOM4J详解** DOM4J是一个开源的Java库,专为处理XML文档而设计。它提供了丰富的API,使得XML的读取、写入、修改和解析变得简单易行。DOM4J是基于Java DOM的,但同时也吸取了JDOM的优点,避免了它们的一些缺点,...

    dom4j解析xml文件的压缩包

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

    dom4j-java-API

    DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了简单且高效的API,使得开发者可以轻松地解析、创建、修改以及操作XML数据。在Java世界中,DOM4J是与DOM(Document Object Model)相媲美的一个选择,但它比...

    dom4j所需要的包和依赖包

    - **XMLWriter**:将DOM4J的Document对象写回XML文件,提供格式化的输出。 - **XPath**:基于XPath表达式进行查询,可以快速定位XML文档中的特定节点。 - **Modifier**:提供修改XML文档结构的能力,如添加、删除...

    dom4j-1.6.1.jar.zip

    标题"dom4j-1.6.1.jar.zip"指的是一个包含dom4j库的特定版本,即1.6.1版本的归档文件,该文件被压缩为ZIP格式。DOM4J是一个Java库,主要用于处理XML文档,提供了丰富的API来操作XML内容。 描述...

    dom4j-1.6.1.jar及其2.0.2、2.1.1三个版本的jar包

    DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了灵活且高效的API,使得XML的解析、创建、修改和查询变得简单。DOM4J的名字来源于Document Object Model(DOM)和Java的组合,但它并不完全遵循W3C的DOM规范...

    dom4j学习资料_dom4j-1.6.1-API.chm

    5. **Reader/Writer**: DOM4J提供了一组流式接口,用于读写XML文件,可以实现高效的输入输出操作。 6. **Namespace**: 处理XML命名空间,DOM4J提供了方便的方法来处理具有命名空间的XML文档。 7. **Mutation**: 支持...

    dom4j dom4j实例

    **DOM4J详解与实例应用** DOM4J是一款强大的Java XML处理库,它提供了一种灵活且高效的方式来处理XML文档。DOM4J以其简洁的API、高性能和丰富的功能,成为了许多Java开发者在处理XML时的首选工具。在这个实例中,...

    dom4j Api文档 dom4j-1.6.1 api文档

    - **XMLWriter**: 负责将DOM4J的结构写回为XML格式的字符串或输出流。 - **XPath**: `XPath`类实现了XPath表达式的解析和执行,可以用来查找文档中的节点集合。 **3. 使用示例** - **解析XML文档**:使用`...

    Dom4J生成XML的完整方法希望大家能用到

    ### Dom4J生成XML的完整方法详解 在Java开发领域,处理XML文档是常见的需求之一。Dom4J作为一款优秀的Java XML API,以其简洁、高效的特点,在生成、解析和操作XML文档方面表现突出。本文将深入探讨如何使用Dom4J库...

    dom4j document

    这段代码演示了如何使用DOM4J和XSLT将XML文档转换并输出到控制台。 #### 结论 DOM4J是一个强大而灵活的工具,适用于各种XML处理任务。无论是简单的数据读取还是复杂的XML转换,DOM4J都能提供高效、便捷的解决方案...

    最新Dom4j 与 dom4j英文版API

    **Dom4j详解** Dom4j是一个开源的Java库,专为XML处理设计,包括文档对象模型(DOM),简单API for XML(SAX)以及事件驱动的XML解析器(StAX)。它提供了一种灵活的方式来处理XML文档,适用于文档创建、读取、更新...

    dom4j帮助文档和架包

    8. **XML序列化**:DOM4J可以将XML Document对象序列化为字符串或者写入到输出流,方便XML数据的传输和存储。 9. **XPath支持**:DOM4J集成了XPath 1.0,可以使用XPath表达式来查询XML文档中的节点,这大大简化了...

    dom4j -1.6.1 源码 dom4j -1.6.1 源码

    **dom4j -1.6.1 源码解析** **一、dom4j简介** dom4j是一个开源的Java XML API,它提供了一种高效、灵活的方式来处理XML文档。dom4j的设计目标是简单易用,同时又具有强大的功能,支持XPath查询、XML Schema验证、...

    dom4j demo 使用

    **DOM4J 框架详解与Demo应用** DOM4J 是一个强大的Java库,用于处理XML文档。它提供了一套灵活且高效的API,使得XML的解析、创建、查询和修改变得简单。DOM4J这个名字来源于Document Object Model (DOM) 和Java的...

    Dom4J完成例子,Dom4J

    **Dom4j详解** Dom4j是一个开源的Java库,用于处理XML文档。它提供了简单且功能强大的API,使得XML的解析、创建、修改和读取变得更加容易。在这个例子中,我们将深入探讨Dom4j的核心功能和使用方法。 **1. XML解析...

Global site tag (gtag.js) - Google Analytics