Java StAX 中的 XMLStreamWriter
Java 6 中添加的 XML 流 API 提供了一个方便的接口 XMLStreamWriter,用于编写 XML 文档。这个 API 不需要像 DOM 那样构建任何特定的对象结构,也不需要执行任何中间任务。它还默认支持命名空间,这在更高级的情况下非常有用。
下面列出了用于创建 XMLStreamWriter 对象并将数据写入其中的方法:
- 写开始文档()
- 写开始元素()
- 写字符()
- 写入结束元素()
- writeEndDocument()
Java StAX中的XMLStreamWriter有一定的限制,主要有以下几点:
- 仍然可能创建格式不正确的 XML 文档,例如包含多个根元素或缺少命名空间定义。
- XMLStreamWriter 不会缩进其输出,因此使用纯文本编辑器可能有点难以阅读。因此,为了阅读,建议在大多数具有用户友好界面的Web浏览器中打开它,以查看XML文档的结构。
程序:
- 使用 XMLOutputFactory 创建 XMLStreamWriter 的实例
- 编写 XML 的标题并继续编写元素。
- 添加元素后,我们可以添加属性、字符数据或 CDATA
- 关闭打开的元素
- 清空元素或写评论
- 关闭并完成 XML 文档
现在让我们更多地讨论它们是如何编写的,以便在我们的Java程序中实现它们。
步骤 1:使用 XMLOutputFactory 创建 XMLStreamWriter 的实例。
XMLOutputFactory outputFactory = XMLOutputFactory.newFactory();
XMLStreamWriter xmlStreamWriter = outputFactory.createXMLStreamWriter(outputStream);
第 2 步:编写 XML 的标题并继续编写元素。
xmlStreamWriter.writeStartElement("gfg");
第 3 步:添加元素后,我们可以添加属性、字符数据或 CDATA。
xmlStreamWriter.writeAttribute("id", "10");
xmlStreamWriter.writeCharacters("hello world!");
xmlStreamWriter.writeCData("more text data");
第 4 步:关闭打开的元素
xmlStreamWriter.writeEndElement();
第 5 步:清空元素或写注释,但请注意这是一个可选步骤
xmlStreamWriter.writeEmptyElement("used & new");
xmlStreamWriter.writeComment("Thank you!");
步骤 6:关闭并完成 XML 文档。
xmlStreamWriter.writeEndDocument();
xmlStreamWriter.close();
例子
Java
// Java Program to Illustrate XMLStreamWriter in Java StAX
// Importing required classes
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.UnsupportedEncodingException;
import java.io.Writer;
import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamWriter;
// Main class
public class StaxXMLStreamWriter {
// Main driver method
public static void main(String[] args)
throws FileNotFoundException, XMLStreamException,
UnsupportedEncodingException
{
// Try block to check for exceptions
try {
// File Path
String filePath = "D:\\gfg_file.xml";
// Creating FileWriter object
Writer fileWriter = new FileWriter(filePath);
// Getting the XMLOutputFactory instance
XMLOutputFactory xmlOutputFactory
= XMLOutputFactory.newInstance();
// Creating XMLStreamWriter object from
// xmlOutputFactory.
XMLStreamWriter xmlStreamWriter
= xmlOutputFactory.createXMLStreamWriter(
fileWriter);
// Addoing elements to xmlStreamWriter
// Custom input element addition
xmlStreamWriter.writeStartElement("gfg");
xmlStreamWriter.writeAttribute("id", "10");
xmlStreamWriter.writeCharacters("hello world!");
xmlStreamWriter.writeCData("more text data");
xmlStreamWriter.writeEndElement();
xmlStreamWriter.writeEmptyElement("used & new");
xmlStreamWriter.writeComment("Thank you!");
xmlStreamWriter.writeEndDocument();
// Writing the content on XML file and
// close xmlStreamWriter using close() method
xmlStreamWriter.flush();
xmlStreamWriter.close();
// Display message for successful execution of
// program
System.out.println(
"XML file created successfully.");
}
// Catch block to handle exceptions
catch (Exception e) {
// Print the line number where exception occurs
e.printStackTrace();
}
}
}
输出:
hello world!
结论:
Streaming API for XML 提供了一种非常方便、快速且节省内存的方式来编写 XML 文档,而无需担心细节和特殊字符的转义。它是 DOM 的绝佳替代品,尤其是当您不需要出于任何原因在内存中保留和管理 DOM 树时。