诡异的dom4j的输出

昨天发现一个问题,使用dom4j的XMLWrtier输出的问题。

首先先说一下现象吧,如果XML里面包含了一些特殊字符,比如 这个是line feed,也就是换行符。在经过它输出后总是会变成\n, 不好干预它的转化。下面来看具体的例子。

这个是原始的xml文件:

Xml代码

 
 
 
  1. xml version="1.0" encoding="UTF-8"?>  
  2.   
  3.        
  4. Package> 

下面是测试代码:

Java代码

 
 
 
  1. package org.powermock.examples.dom4j;   
  2.   
  3. import java.io.BufferedReader;   
  4. import java.io.File;   
  5. import java.io.FileInputStream;   
  6. import java.io.FileOutputStream;   
  7. import java.io.InputStreamReader;   
  8.   
  9. import javax.xml.transform.Transformer;   
  10. import javax.xml.transform.TransformerFactory;   
  11. import javax.xml.transform.stream.StreamResult;   
  12.   
  13. import junit.framework.Assert;   
  14.   
  15. import org.dom4j.Document;   
  16. import org.dom4j.DocumentHelper;   
  17. import org.dom4j.Element;   
  18. import org.dom4j.io.DocumentSource;   
  19. import org.dom4j.io.XMLWriter;   
  20. import org.junit.Test;   
  21.   
  22. public class TestXMLOutput {   
  23.        
  24.     public final static String FILE_NAME = "text.xml";   
  25.        
  26.     @Test  
  27.     public  void testDom4j() {   
  28.   
  29.         Document document = createDocument();   
  30.         try {   
  31.             Element rootElement = document.getRootElement();   
  32.             String packageName = rootElement.attributeValue("name");   
  33.                
  34.             Assert.assertEquals("Test\nTest", packageName);   
  35.                
  36.             FileOutputStream fos = new FileOutputStream("dom4j_"+FILE_NAME);   
  37.             XMLWriter writer = new XMLWriter(fos);   
  38.             writer.setEscapeText(false);   
  39.             writer.write(document);   
  40.                
  41.             fos.close();   
  42.             writer.close();   
  43.         } catch (Exception e) {   
  44.             e.printStackTrace();   
  45.         }   
  46.     }   
  47.        
  48.     @Test  
  49.     public void testDom(){   
  50.         Document document = createDocument();   
  51.         try {   
  52.             FileOutputStream fos = new FileOutputStream("dom_"+FILE_NAME);   
  53.              // Use a Transformer for output   
  54.              TransformerFactory tFactory =   
  55.                 TransformerFactory.newInstance();   
  56.              Transformer transformer = tFactory.newTransformer();   
  57.              transformer.setOutputProperty("indent","yes");   
  58.              transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount","4");   
  59.              transformer.setOutputProperty("encoding","UTF-8");   
  60.                 
  61.              DocumentSource source = new DocumentSource(document);   
  62.              StreamResult result = new StreamResult(fos);   
  63.              transformer.transform(source,result);   
  64.                 
  65.              fos.close();   
  66.         } catch (Exception e) {   
  67.             e.printStackTrace();   
  68.         }   
  69.     }   
  70.        
  71.     private Document createDocument(){   
  72.         Document document = null;   
  73.         try {   
  74.             File file = new File(FILE_NAME);   
  75.             BufferedReader reader = new BufferedReader(   
  76.                     new InputStreamReader(new FileInputStream(file)));   
  77.                
  78.             StringBuffer buffer = new StringBuffer();   
  79.             String line = "";   
  80.             while((line = reader.readLine()) != null){   
  81.                 buffer.append(line);   
  82.             }   
  83.             reader.close();   
  84.                
  85.             document = DocumentHelper.parseText(buffer.toString());   
  86.         } catch (Exception e) {   
  87.             e.printStackTrace();   
  88.         }   
  89.         return document;   
  90.     }   

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

Xml代码

 
 
 
  1. xml version="1.0" encoding="UTF-8"?>  
  2. Test">    Package>

下面是transfomer的输出:

Xml代码

 
 
 
  1. xml version="1.0" encoding="UTF-8"?>  
  2.    Package>

大家看到效果了把,dom4j变成了 \n, 但是transfomer还是原来的格式。

如果大家谁有对这块有研究的,希望给我留言解决这个问题。

文章题目:诡异的dom4j的输出
文章转载:http://www.shufengxianlan.com/qtweb/news32/441832.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联