在 Java 中,可以借助javax.xml.transform包来格式化 XML。示例代码如下:
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import java.io.StringReader;
import java.io.StringWriter;
public class XmlFormatter {
public static String formatXml(String xml) {
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(new org.xml.sax.InputSource(new StringReader(xml)));
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
StringWriter writer = new StringWriter();
transformer.transform(new DOMSource(document), new StreamResult(writer));
return writer.toString();
} catch (Exception e) {
e.printStackTrace();
return xml;
}
}
public static void main(String[] args) {
String xml = "<library><book><title>《百年孤独》</title><author>加西亚·马尔克斯</author><year>1967</year></book><book><title>《呐喊》</title><author>鲁迅</author><year>1923</year></book></library>";
String formattedXml = formatXml(xml);
System.out.println(formattedXml);
}
}