让Java使用制表符而不是空格进行缩进

8

我正在创建一个XML文档。我使用以下代码使其缩进:

TransformerFactory.setAttribute("indent-number", new Integer(2)); Transformer.setOutputProperty(OutputKeys.INDENT, "yes");

是否有可能让Java使用制表符而不是空格进行缩进?如何实现?


用制表符(tabs)而不是空格,会有什么不同呢?你的编辑器喜欢使用制表符吗? - Thorbjørn Ravn Andersen
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4"); 对我很有用。这可能并不是保证,实际上它似乎高度依赖于您使用的Java版本。个人而言,在数据文件中制表符与空格无意义。 - Mike McMahon
3个回答

2

不,总的来说不行。XSLT规范不允许指定缩进时使用什么空格。

但是,配置这个可能是与XSLT处理器特定相关的项目。请检查您正在使用的处理器的文档。

如果您真的想要这个功能,那么可以在输出上使用一个后置的XSLT脚本,在text()节点上执行任何您想要执行的操作。


1

是的,有些人认为制表符是邪恶的。但是,如果您想使用TransformFactory并希望更改缩进行为以使用制表符而不是空格,则需要提供自己的ContentHandler实现。然后将您的ContentHandler实现传递到新的SAXResult中 - 将其作为“结果”传递给Transformer.transform(...)。需要跳过很多障碍。 另一个考虑因素可能是在输出上使用智能XSLT。


0

我认为不需要这样做。

你可以获取结果并处理它,替换调用str.replace("\n ", "\n\t")(或任何你想要的空格数)。

但我建议不要这样做 - 制表符不是跨平台的。


4
@Bozho,使用str.replace函数可能存在危险,因为它有可能会将一些属性值中的空格替换为制表符等其他字符,这样做是非常不希望看到的。 - ring bearer
这仅替换第一级缩进。 - EndlosSchleife

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接