在 Java 中,你可以使用不同的方式来格式化 XML。下面我将介绍两种常用的方式:使用 Java 内置的库和使用第三方库(Apache XML Graphics Commons)。我会为每种方式提供详细的步骤流程和示例代码。
Java 内置了 javax.xml.transform
包,其中的 Transformer
类可以用于格式化 XML。
步骤流程:
Document
对象,可以通过解析现有的 XML 文件或者构建一个新的 XML 文档。Transformer
对象,它用于转换 XML 内容。Transformer
的输出属性,包括缩进、换行等。StreamResult
对象,用于将格式化后的 XML 写入文件或输出流。Document
对象通过 Transformer
进行格式化,并将结果输出到 StreamResult
中。示例代码:
import org.w3c.dom.Document;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerException;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.File;
public class XmlFormattingExample {
public static void main(String[] args) {
try {
// Step 1: Create a Document
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document document = docBuilder.newDocument();
// Step 2: Create a Transformer
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
// Step 3: Set Transformer properties for formatting
transformer.setOutputProperty(javax.xml.transform.OutputKeys.INDENT, "yes");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
// Step 4: Create a StreamResult
StreamResult result = new StreamResult(new File("formatted.xml"));
// Step 5: Format and output the Document
DOMSource source = new DOMSource(document);
transformer.transform(source, result);
System.out.println("XML file formatted successfully!");
} catch (Exception e) {
e.printStackTrace();
}
}
}
Apache XML Graphics Commons 是一个第三方库,提供了更多的 XML 处理功能,包括格式化。
步骤流程:
XMLSerializer
对象并配置格式化属性。XMLSerializer
将 XML 文档格式化为字符串。Maven 依赖:
<dependency>
<groupId>org.apache.xmlgraphics</groupId>
<artifactId>xmlgraphics-commons</artifactId>
<version>2.6</version>
</dependency>
Gradle 依赖:
implementation 'org.apache.xmlgraphics:xmlgraphics-commons:2.6'
示例代码:
import org.apache.xmlgraphics.util.XMLSerializer;
import org.w3c.dom.Document;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.StringWriter;
public class XmlFormattingApacheExample {
public static void main(String[] args) {
try {
// Step 1: Create a Document
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document document = docBuilder.newDocument();
// ... Build or load your XML document ...
// Step 2: Create an XMLSerializer
XMLSerializer serializer = new XMLSerializer();
// Step 3: Configure formatting properties
serializer.setIndent(true);
serializer.setIndentAmount(2);
// Format the Document to a String
StringWriter writer = new StringWriter();
serializer.serialize(document, writer);
String formattedXml = writer.toString();
System.out.println(formattedXml);
} catch (Exception e) {
e.printStackTrace();
}
}
}
这两种方法都能够帮助你格式化 XML 文档,选择适合你项目需求和代码风格的方法即可。