诡异的dom4j的输出
创始人
2024-07-25 19:00:17
0

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

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

这个是原始的xml文件:

Xml代码

 

 

 

 

  1.     
  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.     }     
  91. }  

 

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

Xml代码

  1.     
  2. Test">   Package> 

 

下面是transfomer的输出:

Xml代码

  1.     
  2.   Package> 

 

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

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

【编辑推荐】

  1. JavaFX HTTP网络和XML分析
  2. 详解Java解析XML的四种方法
  3. XML新手入门 创建构造良好的XML

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...