使用以下简单代码:
package test;
import java.io.*;
import javax.xml.transform.*;
import javax.xml.transform.stream.*;
public class TestOutputKeys {
public static void main(String[] args) throws TransformerException {
// Instantiate transformer input
Source xmlInput = new StreamSource(new StringReader(
"<!-- Document comment --><aaa><bbb/><ccc/></aaa>"));
StreamResult xmlOutput = new StreamResult(new StringWriter());
// Configure transformer
Transformer transformer = TransformerFactory.newInstance()
.newTransformer(); // An identity transformer
transformer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, "testing.dtd");
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.transform(xmlInput, xmlOutput);
System.out.println(xmlOutput.getWriter().toString());
}
}
我得到输出:
<?xml version="1.0" encoding="UTF-8"?>
<!-- Document comment --><!DOCTYPE aaa SYSTEM "testing.dtd">
<aaa>
<bbb/>
<ccc/>
</aaa>
问题A:doctype标签出现在文档注释之后。是否可以让它出现在文档注释之前?
问题 B:如何仅使用 JavaSE 5.0 API 实现缩进?
这个问题本质上是相同的如何从 java 漂亮地打印 xml, however该问题的几乎所有答案都依赖于外部库。唯一适用的答案(由名为 Lorenzo Boccaccia 的用户发布)仅使用 java 的 api,基本上等于上面发布的代码,但对我不起作用(如输出所示,我没有缩进)。
我猜你必须设置用于缩进的空格量,就像外部库的许多答案所做的那样,但我只是找不到在 java api 中指定的位置。鉴于 java api 中存在将缩进属性设置为“yes”的可能性,因此必须能够以某种方式执行缩进。我就是不知道怎么办。
缺少的部分是缩进量。您可以按如下方式设置缩进和缩进量:
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
transformer.transform(xmlInput, xmlOutput);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)