Java StAX API 中的 XML EventWriter
Java StAX API 是在Java 6 中引入的,被认为优于 DOM 和 SAX 解析器。我们可以使用Java StAX 解析器来读取 XML 文件, Java Streaming API for XML (Java StAX) 提供了在Java处理 XML 的实现。 Java StAX API 中的XMLEventWriter类允许您将 StAX XMLEvent 写入 Writer、OutputStream 或 Result(特殊的 JAXP 对象)。
XMLEventWriter 提供的方法将数据写入其中:
- 创建开始文档()
- 创建开始元素()
- 创建属性()
- 创建命名空间()
- 创建结束元素()
Java StAX中的XMLEventWriter有一些限制,主要有以下几点:
- XMLEventWriter 不会缩进其输出,因此使用纯文本编辑器可能有点难以阅读。因此,为了阅读,建议在大多数具有用户友好界面的Web浏览器中打开它,以查看XML文档的结构。
- 仍然可能创建格式不正确的 XML 文档,例如包含多个根元素或缺少命名空间定义。
程序:
- 创建 XMLEventWriter 的实例
- 编写 XML 的标头
- 创建语句
- 添加元素,以便我们可以添加属性、命名空间。
- 冲洗并关闭打开的元素
- 添加 try 和 catch 块
它们如下图所示:
步骤 1:使用 XMLOutputFactory 创建 XMLEventWriter 的实例。
XMLOutputFactory factory = XMLOutputFactory.newInstance();
XMLEventFactory eventFactory = XMLEventFactory.newInstance();
XMLEventWriter writer =factory.createXMLEventWriter(
new FileWriter("F:\\gfg-XmlFile.xml"));
第 2 步:编写 XML 的标题并继续创建开始元素。
XMLEvent event = eventFactory.createStartDocument();
event = eventFactory.createStartElement("GFG", "https://www.geeksforgeeks.org/", "document");
第 3 步:添加元素后,我们可以添加属性、命名空间。
event = eventFactory.createNamespace("GeeksforGeeks-practice",
"https://practice.geeksforgeeks.org/");
writer.add(event);
event = eventFactory.createAttribute("attribute", "value");
writer.add(event);
第 4 步:冲洗并关闭打开的元素。
writer.flush();
writer.close();
第 5 步:添加 try 和 catch 块。
try
{
----------code------------
}
catch (XMLStreamException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
例子
Java
// Java Program to Illustarte XML EventWriter in StAX API
// Importing required classes
import java.io.*;
import javax.xml.stream.XMLEventFactory;
import javax.xml.stream.XMLEventWriter;
import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.events.XMLEvent;
// Main class
class GFG {
// Main driver method
public static void main(String[] args)
{
// Getting the XMLOutputFactory instance
XMLOutputFactory factory
= XMLOutputFactory.newInstance();
// Getting the XMLEventFactory instance
XMLEventFactory eventFactory
= XMLEventFactory.newInstance();
// Try block to check for exceptions
try {
// Creating EventWriter object
XMLEventWriter writer
= factory.createXMLEventWriter(
new FileWriter("F:\\gfg-XmlFile.xml"));
XMLEvent event
= eventFactory.createStartDocument();
writer.add(event);
// Creating a start element
event = eventFactory.createStartElement(
"GFG", "https://www.geeksforgeeks.org/",
"document");
writer.add(event);
// Cteating namespace
event = eventFactory.createNamespace(
"GeeksforGeeks-practice",
"https://practice.geeksforgeeks.org/");
writer.add(event);
// Setting attributes
event = eventFactory.createAttribute(
"attribute", "GFG");
writer.add(event);
// Lastly creating ana end element
event = eventFactory.createEndElement(
"GFG", "http://gfg.com", "document");
writer.add(event);
// Flush and close xmlEventWriter
// using close() and flush() method
// It is always a good practice
writer.flush();
writer.close();
}
// Catch block to handle exceptions
catch (XMLStreamException e) {
// Print line number where exception occurs
// using printStacktrace() method
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
输出:
Note: Streaming Event Writer API for XML provides a very convenient, fast, and memory-efficient way to write XML documents without worrying about details and escaping special characters. It is a great alternative to DOM especially when you don’t need to keep and manage DOM tree in memory for any reason.