`

dom4j 生成xml时,属性值中的回车换行问题

阅读更多
首先属性中的回车换行对我来说非常有用,可是在使用过程中发现dom4j自动把回车换行去掉了。
我需要生成的部分xml是这样的。
<data>
  @H=16*16
  @C=60
  我的中国
  @I=000
  @K=2
  @O=000
  @Q
</data>
生成xml的部分代码
try {
    StringWriter writer = new StringWriter();
    OutputFormat format = OutputFormat.createPrettyPrint();
    format.setEncoding("GB2312");
    XMLWriter xmlwriter = new XMLWriter(writer, format);
    xmlwriter.write(document);
    returnValue = writer.toString();
     } catch (Exception ex) {
       ex.printStackTrace();
   }

用如上代码后生成xml的结果为
<data>@H=16*16 @C=60  我的中国  @I=000 @K=2 @O=000 @Q</data>
证实在生成xml前的代码有回车换行后,详细想“一定是dom4j的问题“
问题就出在OutputFormat.createPrettyPrint();这上。
 /**
     * A static helper method to create the default pretty printing format. This
     * format consists of an indent of 2 spaces, newlines after each element and
     * all other whitespace trimmed, and XMTML is false.
     * 
     * @return DOCUMENT ME!
     */
    public static OutputFormat createPrettyPrint() {
        OutputFormat format = new OutputFormat();
        format.setIndentSize(2);
        format.setNewlines(true);
        format.setTrimText(true);
        format.setPadText(true);

        return format;
    }

    /**
     * A static helper method to create the default compact format. This format
     * does not have any indentation or newlines after an alement and all other
     * whitespace trimmed
     * 
     * @return DOCUMENT ME!
     */
    public static OutputFormat createCompactFormat() {
        OutputFormat format = new OutputFormat();
        format.setIndent(false);
        format.setNewlines(false);
        format.setTrimText(true);

        return format;
    }
}

createPrettyPrint()方法中有
format.setTrimText(true);
问题就出在这里。
所以新建了类MyOutputFormat 继承了OutputFormat重载了createPrettyPrint()方法
public class MyOutputFormat extends OutputFormat {
	 public static OutputFormat createPrettyPrint() { 
	        OutputFormat format = new OutputFormat(); 
	        format.setIndentSize(2); 
	        format.setNewlines(true); 
	        format.setTrimText(false); 
	        format.setPadText(true); 

	        return format; 
	    } 

}

修改后的代码代码
try {
    StringWriter writer = new StringWriter();
    OutputFormat format = OutputFormat.createPrettyPrint();
    format.setEncoding("GB2312");
    XMLWriter xmlwriter = new XMLWriter(writer, format);
    xmlwriter.write(document);
    returnValue = writer.toString();
     } catch (Exception ex) {
       ex.printStackTrace();
   }

最后问题解决
分享到:
评论
3 楼 qha0731 2016-04-03  
这样我试了,不行。

需要自己继承XMLWriter,覆盖writeAttributes等方法。

才能实现Attribute的换行。
2 楼 shikonglaike 2010-07-28  
public static String outPutXML(Document document) {
		try {
			StringWriter writer = new StringWriter();
			OutputFormat format = OutputFormat.createPrettyPrint();
			format.setIndentSize(2);
			format.setNewlines(true);
			format.setTrimText(false);
			format.setPadText(true);
			format.setEncoding("UTF-8");
			XMLWriter xmlwriter = new XMLWriter(writer, format);
			xmlwriter.write(document);
			return writer.toString();
		} catch (Exception ex) {
			ex.printStackTrace();
		}
		return null;
	}

此文是我以前写的,现在看来还有点不成熟,其实使用如上方式完全可以实现换行的,你可以试试。
1 楼 hunnuxiaobo 2010-07-20  
“所以新建了类MyOutputFormat 继承了OutputFormat重载了createPrettyPrint()方法 ”
这句说法不对,应该是子类隐藏了父类的静态方法。
我想问一下,我如不采用这种继承方式解决换行问题,而是直接调用:
OutputFormat format = OutputFormat.createPrettyPrint();  
format.setEncoding("GB2312");  
format.setNewlines(true);   
format.setTrimText(false);   

XMLWriter xmlwriter = new XMLWriter(writer, format);  
为什么还是不成功?

相关推荐

    c++ xml 操作方法大全

    4. **修改XML**:添加、删除或更新XML节点和属性。例如,用新的作者替换现有值: ```cpp XMLNodePtr authorNode = book-&gt;getChildByName("author"); authorNode-&gt;setValue("Michael Abrash"); ``` 5. **序列化...

    详谈DOM简介及节点、属性、查找节点的方法

    4. `getElementsByName()`:根据name属性获取元素,旧版本中只对可提交的元素有效。 5. `querySelector()`:使用CSS选择器选取第一个匹配的元素,不被IE7及以下版本兼容。 6. `querySelectorAll()`:返回所有匹配CSS...

    数据库系统开发考试题目.docx

    - XML处理:DOM模型中,使用load方法加载XML文档。 - 构造函数:构造函数必须与类名相同,用于初始化对象。 - 接口:接口可以声明方法、属性、索引器和事件,但不能声明域或私有成员变量。 - ASP.NET服务器控件...

    javascript 简单文本编辑器

    在文本编辑器中,需要监听键盘事件来实现文本的实时编辑,如回车换行、复制粘贴、撤销重做等功能。 3. CSS样式控制:为了提供良好的用户体验,文本编辑器需要具备基本的样式控制,如字体、字号、颜色等。这需要熟悉...

    超实用的jQuery代码段

    超实用的jQuery代码段精选近350个jQuery代码段,涵盖页面开发中绝大多数要点、技巧与方法,堪称史上最实用的jQuery代码参考书,可以视为网页设计与网站建设人员的好帮手。《超实用的jQuery代码段》的代码跨平台、跨...

    数据库系统开发考试题目.doc

    - DOM(文档对象模型):一种处理XML文档的方式,load方法用于加载XML文档到内存中。 请注意,这只是一个简要的解释,实际的考试可能会涉及到更深入的问题,包括SQL查询、事务管理、面向对象编程原则、异常处理、...

    《程序天下:JavaScript实例自学手册》光盘源码

    21.7 使用DOM获取页面中某控件的属性 21.8 将某行排在表格的最后 21.9 动态删除页面中的元素 21.10 克隆表格 21.11 拖动表格行改变顺序 21.12 表格操作常用方法 第22章 流行应用:AJAX和Property的应用技巧 22.1 ...

    程序天下:JavaScript实例自学手册

    21.7 使用DOM获取页面中某控件的属性 21.8 将某行排在表格的最后 21.9 动态删除页面中的元素 21.10 克隆表格 21.11 拖动表格行改变顺序 21.12 表格操作常用方法 第22章 流行应用:AJAX和Property的应用技巧 22.1 ...

    我的Ajax学习笔记

    7. **ID属性**:Ajax中使用ID属性来定位DOM元素,以便进行操作。 8. **div与span**:div常用于组织大块内容,内容会独占一行;span则用于包裹小块内容,与其他内容并排显示。 9. **jQuery与DOM**:jQuery库提供了...

    2021-2022计算机二级等级考试试题及答案No.14464.docx

    4. 文件属性查看:在Windows中,右击文件图标,可以在“属性”中查看文件的大小、创建日期等信息,但一般不包括文件的字数和行数。 5. Visual Basic随机数生成:`Rnd()`函数用于生成0到1之间的随机浮点数,`Int()`...

    JSON入门教程

    例如,可以访问一个名为Person的对象中的name属性和address属性,而address对象又可能包含city、street和postcode等属性。通过这种方式,开发者可以很轻松地在Web页面上展示从服务器获取的复杂数据结构。 总的来说...

    亮剑.NET深入体验与实战精要2

    7.6.2 通过Microsoft.XMLDOM调用Web Service 291 7.6.3 XMLHTTP POST调用Web Service 293 7.6.4 SOAP调用Web Service 293 7.7 WinForm如何调用Web Service 295 7.7.1 .NET的WinForm调用Web Service 295 7.7.2 手动...

    亮剑.NET深入体验与实战精要3

    7.6.2 通过Microsoft.XMLDOM调用Web Service 291 7.6.3 XMLHTTP POST调用Web Service 293 7.6.4 SOAP调用Web Service 293 7.7 WinForm如何调用Web Service 295 7.7.1 .NET的WinForm调用Web Service 295 7.7.2 手动...

    jsp+ajax实现googleSuggest(全)

    **知识点详解** 本文将深入探讨如何使用JSP和AJAX技术来实现Google Suggest的效果,即用户在输入框中输入内容时,...在实际开发中,还需要考虑性能优化、错误处理、兼容性等问题,确保应用在各种环境下都能稳定运行。

    js学习总结

    jQuery提供了一系列API来高效地选择、操作DOM元素,包括元素的选择、属性的修改、事件处理等。 总结来说,JS学习涉及基础语法、数据类型、进制转换、错误处理等多个方面,理解这些基础知识对于深入学习和应用...

    数据库系统开发考试题目.pdf

    10. XML处理:DOM(Document Object Model)模型通过load方法加载XML文档,便于程序对其进行操作。在.NET中,可能需要使用XmlNode和XmlDocument类来解析和操作XML。 11. 构造函数和接口:构造函数是与类同名的特殊...

    JS下拉选择(同样适用于手机端)

    3. AJAX动态获取值:AJAX(Asynchronous JavaScript and XML)是用于异步更新页面的技术。在这个例子中,我们可以在用户输入时触发AJAX请求,获取与输入匹配的下拉选项。 ```javascript document.getElementById('...

Global site tag (gtag.js) - Google Analytics