- 浏览: 134770 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (84)
- Java (30)
- C/C++ (3)
- Linux (1)
- 数据库 (19)
- 搜索引擎 (1)
- 数据结构 (2)
- 杂七杂八 (4)
- WEB前端 (6)
- Spring (2)
- JavaScript (9)
- DHTMLX (3)
- 正则表达式 (1)
- JQuery (1)
- Report (2)
- PDF (2)
- Word (0)
- Excel (0)
- CSV (0)
- Test & QA (1)
- BI (Business Intelligence) (10)
- SQL (18)
- SAP Business Object (0)
- DataStage (3)
- CI (Continuous Integration) (1)
- Algorith (3)
- Portal (1)
- Struts (1)
- Oracle (9)
- MS SQL Server (3)
- Teradata (3)
- MySql (1)
- Data Warehouse (5)
- ETL (8)
使用java自带的xml api生成的xml文件,其格式都是没有缩进的,每个element都是顶到最前面,今天终于找到了比较好的处理方法,赶紧记下来. 使用Java标准的JAXP来输出可以使用:
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.transform(new DOMSource(document), new StreamResult(outputFile));
中间的红色代码是用于设置缩进的,比较遗憾的是JAXP只抽象出是否设置缩进(indent: yes|no),但并没有抽象出设置缩进量长度的常量(indent-number),所以默认的缩进量长度为0。如果有下面这样一个xml文档:<root><a><b>c</b></a></root>会被格式化为:
<root>
<a>
<b>c</b>
</a>
</root>
由于JAXP只是一个Java一个处理XML的框架,根据实现的不一样,可以传入实现特定的某个Key来设置缩进量。比如在Java 1.4下面,可以通过下面语句将缩进量设为2:
transformer.setOutputProperty(
"{http://xml.apache.org/xslt}indent-amount", "2");
或
transformer.setOutputProperty(
"{http://xml.apache.org/xalan}indent-amount", "2");
上面两句不同之处仅在于命名空间。
而在Java 1.5下面,情况就有些复杂了。Java 1.5集成了JXAP 1.3(Java 1.4集成的是JXAP 1.1,不同之处参见http://java.sun.com/j2se/1.5.0/docs/guide/xml/jaxp/JAXP-Compatibility_150.html),实现基于Xerces类库。由于内部实现上的Bug,导致了设置缩进的不同:
TransformerFactory tf = TransformerFactory.newInstance();
tf.setAttribute("indent-number", new Integer(2));
Transformer transformer = tf.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.transform(new DOMSource(document), new StreamResult(new?BufferedWriter(new OutputStreamWriter(new FileOutputStream(outputFile)))));
注意红色代码的不同之处。第一句设置TransformerFactory的indent-number属性,在Java 1.4下面运行会抛出异常,因为其不支持该属性,而在Java 1.5中却只能通过该属性来设置缩进。后面标为红色的代码则是由于Sun实现上的Bug,只有通过StreamResult(Writer)构造函数生成才能正确设置缩进(通过OutputStream或者File生成的StreamResult是无法设置缩进的,其实现上会忽略任何非正式的属性,而仅仅采用rt.jar下面com\sun\org\apache\xml\internal\serializer\output_xml.properties中的配置。详细可以在com.sun.org.apache.xml.internal.serializer.ToStream类的setOutputStream方法中加断点进行分析)
?
如果忽略掉可移植性,确认绑定在Sun的JRE实现上面,则可以通过如下代码来更好的实现:
OutputFormat format = new OutputFormat(document);
format.setIndenting(true);
format.setIndent(2);
Writer output = new BufferedWriter( new FileWriter(outputFile) );
XMLSerializer serializer = new XMLSerializer(output, format);
serializer.serialize(document);
但是OutputFormat类和XMLSerializer类都是位于com.sun.org.apache.xml.internal.serialize包下。
如果应用对增加一个300K左右的jar包不敏感的话,我还是强烈推荐用dom4j来处理xml,其API设计的非常易用,写出来的代码比用JXAP写出来的代码漂亮多了,也容易维护,也不会出现上面那种两个Java版本不兼容的问题。
发表评论
-
优秀程序员不得不知道的20个位运算技巧 【转】
2012-12-14 11:19 1494【转载】一提起位运算,人们往往想到它的高效性,无论是嵌入式编程 ... -
java导出csv用excel打开后数字不用科学计数法显示
2011-08-15 14:27 22138最近写了一个生成csv的程序,生成的csv其中有一列数字长度 ... -
java读取配置文件的几种方法
2011-07-21 12:17 746java读取配置文件的几种方法 在现实工 ... -
正则表达式语法
2011-07-18 10:52 723一个正则表达式就是 ... -
CSDN上看到的一篇有关Spring JDBC事务管理的文章(内容比较全)
2011-07-08 16:18 1097JDBC事务管理 Spring提供编程式的事务管理(Progr ... -
Spring:JdbcTemplate使用指南
2011-07-07 21:35 1019前言: 本文指在介绍 Spring 框架 ... -
Java DATE 工具类
2011-07-05 12:18 2397public class DateUtil { / ... -
java中取小数点后两位(四种方法)
2011-07-01 16:33 1808一 Long是长整型,怎么有小数,是double吧 ... -
Java正则表达式(一)
2011-06-30 20:14 863正则表达式在处理文本方面用处非常大,最早像在Perl和awk语 ... -
Java正则表达式(二)
2011-06-30 20:13 1000Matcher类: 使用Matcher类,最重要的一个概念必须 ... -
DBUnit入门
2011-04-28 15:55 790相信做过单元测试的人都会对JUnit非常的熟悉了,今天要介绍的 ... -
一些经典算法题目
2011-02-03 21:28 8911.写一个方法,用一个fo ... -
求最大子序列和问题的最优算法
2010-12-17 19:42 879//求最大子序列和问题, public class ... -
Java UDP通信(DatagramPacket类、DatagramSocket类、InetAddress类)
2010-11-30 22:16 1483一、DatagramPacket类: 如果把Datagram ... -
Java向服务器发送POST请求
2010-10-30 19:06 2433public String sendToServer(Stri ... -
Java发送Http请求,解析html返回
2010-10-30 18:53 2055首先,向一个Web站点发送POST请求只需要简单的几步: 注 ... -
Struts1和Struts2的区别和对比
2010-10-30 13:23 8661.Action 类: • Struts1要求Action类 ... -
java.net.URL的URL构建方式
2010-10-30 13:21 877Tag:java.net.URL URL构建方式 ... -
Vector遍历的通用实现
2010-10-27 19:53 1592对于Vector,如果我们不用遍历,那么就要自己去写循环,也是 ... -
Http和Socket连接区别
2010-10-27 11:58 807Http和Socket连接区别 1、 ...
相关推荐
java生成xml文件的时候如何控制xml的缩进格式.pdf
### Java生成XML文件:控制XML的缩进格式 在Java中生成XML文件是一项常见的任务,尤其是在需要与外部系统交互或存储结构化数据时。本文主要介绍如何使用Java自动生成带有适当缩进格式的XML文件。 #### 一、背景...
本文将围绕“格式化XML字符串并生成XML文件”这一主题展开,结合提供的标签“源码”和“工具”,探讨如何通过Java编程实现这一功能。 首先,我们有两个Java源代码文件,即`XMLFileUtil.java`和`XMLFormatUtil.java`...
### JAVA生成XML文件知识点 #### 一、简介 在Java编程中,生成XML文件是一种常见的需求,尤其是在数据交换、配置管理或系统间通信时。本文档通过一个具体的示例介绍了如何使用Java语言来生成XML文件,并对代码进行...
在标题“java生成Xml文件.pdf”中,我们要探讨的是使用Java语言来创建或生成XML文件的相关知识点。XML(可扩展标记语言)是一种标记语言,用于存储和传输数据,它比HTML更为通用和灵活。Java提供了丰富的API来操作...
以下将详细解释如何使用Java生成XML文件,包括节点遍历和属性操作。 首先,我们需要引入必要的库,这里是`jdom.jar`,它是一个用于处理XML的Java库。在示例代码中,我们导入了`org.jdom`包下的几个类,包括`...
本篇文章将详细介绍如何使用Java结合W3C DOM API来生成XML文件。 首先,生成XML文件的基本步骤包括: 1. 创建`DocumentBuilderFactory`实例:这是工厂模式的一个应用,用于创建`DocumentBuilder`对象,后者可以...
总结,使用Java生成JSON文件和Word文档需要理解数据序列化(如JSON)的概念,以及使用相关库(如Jackson和Apache POI)提供的API。通过这些库,你可以轻松地将Java对象转换为可读的JSON格式,或创建结构化的Word文档...
总的来说,将数据库数据生成XML是一项关键的技术,它促进了数据的标准化、互操作性和可移植性,广泛应用于数据交换、API交互、配置文件存储等多个领域。通过理解这一过程,开发者可以更有效地处理数据传输和集成任务...
当需要与数据库交互并生成XML文件时,Java JDBC(Java Database Connectivity)提供了一种强大的方式来连接和操作数据库,然后将查询结果转化为XML格式。以下将详细讲解这个过程中的关键知识点。 首先,我们需要...
我们将讲解如何使用Pull解析器读取本地XML文件,并生成一个新的、格式不同的XML文件。 Pull解析是一种事件驱动的解析方法,它不像DOM解析那样将整个XML文档加载到内存中,而是按需逐个处理XML元素。这种方法节省了...
FreeMarker是一个强大的、开源的模板引擎,主要用于生成动态HTML、XML或其他格式的文本输出,尤其在Web应用开发中被广泛使用。它与Java语言紧密集成,允许开发者通过模板语言(Template Language)来分离应用程序的...
在Java程序中,通过Transformer的setOutputProperties方法,可以设置XML输出的格式属性,如“indent”控制缩进,“omit-xml-declaration”控制是否省略XML声明等。例如,设置"indent"属性为"yes"可以生成带缩进的XML...
`XMLOutputter`提供了格式化输出的功能,可以控制XML的缩进和换行。 在提供的压缩包文件中,"cao.java"可能是实现上述逻辑的Java源代码。而"sqlsever2005表jdom树.rar"可能包含了SQL Server 2005相关的数据库表信息...
注意,通过设置`transformer.setOutputProperty()`可以控制XML输出的格式,例如这里设置了缩进以提高可读性。 在提供的压缩文件中,“Save Document object to XML file - johnsdilon - BlogJava.htm”可能是一个...
Java XML-repair修复工具类是Java编程中处理XML文档时的一种实用工具,它主要用于修复XML文件的格式问题,确保XML文档符合W3C标准,从而能够被正确解析和处理。XML(eXtensible Markup Language)是一种用于标记数据...
在Java编程中,生成XML文件是一项常见的任务,用于数据存储、配置管理或数据交换。JDOM(Java Document Object Model)是一个流行的库,专门用于处理XML文档。本篇将详细介绍如何利用JDOM在Java中生成XML文件,以及...
关于压缩包子文件的文件名称列表,"Markup带缩进(Unicode)"可能是一个包含了改进后的XML处理代码的文件,可能是一个源代码文件(如.cpp或.java),或者是使用这种改进后的工具生成的示例XML文件。为了深入理解这个...
3. **自动格式化**:可以自动调整XML文档的缩进和换行,使其符合标准格式。 4. **验证**:检查XML文档是否符合指定的DTD(文档类型定义)或XSD(XML Schema Definition)。 5. **查找和替换**:在大量XML数据中快速...