Java XML 带有注释块的漂亮打印
Java XML Pretty Print with Commented blocks
我有下面的代码来漂亮地打印给定的 XML。
public void prettyPrintXML(String xmlString) {
try {
Source xmlInput = new StreamSource(new StringReader(xmlString));
StringWriter stringWriter = new StringWriter();
StreamResult xmlOutput = new StreamResult(stringWriter);
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.METHOD, "xml");
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");
transformer.transform(xmlInput, xmlOutput);
System.out.println("OutPutXML : ");
System.out.println(xmlOutput.getWriter().toString());
} catch (Exception e) {
e.printStackTrace();
}
}
这是上面代码的输入和输出:
InputXML :
<employees><employee><name>John</name><age>18</age></employee><!--employee><name>Smith</name><age>27</age></employee--></employees>
OutPutXML :
<?xml version="1.0" encoding="UTF-8"?>
<employees>
<employee>
<name>John</name>
<age>18</age>
</employee>
<!--employee><name>Smith</name><age>27</age></employee-->
</employees>
我需要以下面的格式获取上面输出中的注释块
<!--employee>
<name>Smith</name>
<age>27</age>
</employee-->
有没有办法在 Java 中做到这一点而不使用任何外部库?
不,使用标准库不支持开箱即用。获得这种行为需要进行大量调整;将注释解析为 XML 并从父节点继承缩进级别。您还 运行 将包含纯文本的评论与包含 XML.
的评论混在一起的风险
不过我实现了这样一个处理器:xmlformatter。它还处理文本和 CDATA 节点中的 XML,并且可以稳健地执行此操作(即不会在注释中的无效 XML 上失败)。
来自
<parent><child><!--<comment><xml/></comment>--></child></parent>
你会得到
<parent>
<child>
<!--
<comment>
<xml/>
</comment>-->
</child>
</parent>
我认为这比您想要的输出更具可读性。
我有下面的代码来漂亮地打印给定的 XML。
public void prettyPrintXML(String xmlString) {
try {
Source xmlInput = new StreamSource(new StringReader(xmlString));
StringWriter stringWriter = new StringWriter();
StreamResult xmlOutput = new StreamResult(stringWriter);
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.METHOD, "xml");
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");
transformer.transform(xmlInput, xmlOutput);
System.out.println("OutPutXML : ");
System.out.println(xmlOutput.getWriter().toString());
} catch (Exception e) {
e.printStackTrace();
}
}
这是上面代码的输入和输出:
InputXML :
<employees><employee><name>John</name><age>18</age></employee><!--employee><name>Smith</name><age>27</age></employee--></employees>
OutPutXML :
<?xml version="1.0" encoding="UTF-8"?>
<employees>
<employee>
<name>John</name>
<age>18</age>
</employee>
<!--employee><name>Smith</name><age>27</age></employee-->
</employees>
我需要以下面的格式获取上面输出中的注释块
<!--employee>
<name>Smith</name>
<age>27</age>
</employee-->
有没有办法在 Java 中做到这一点而不使用任何外部库?
不,使用标准库不支持开箱即用。获得这种行为需要进行大量调整;将注释解析为 XML 并从父节点继承缩进级别。您还 运行 将包含纯文本的评论与包含 XML.
的评论混在一起的风险不过我实现了这样一个处理器:xmlformatter。它还处理文本和 CDATA 节点中的 XML,并且可以稳健地执行此操作(即不会在注释中的无效 XML 上失败)。
来自
<parent><child><!--<comment><xml/></comment>--></child></parent>
你会得到
<parent>
<child>
<!--
<comment>
<xml/>
</comment>-->
</child>
</parent>
我认为这比您想要的输出更具可读性。