📜  Java StAX API 中的 XML EventWriter

📅  最后修改于: 2022-05-13 01:54:59.090000             🧑  作者: Mango

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有一些限制,主要有以下几点:

  1. XMLEventWriter 不会缩进其输出,因此使用纯文本编辑器可能有点难以阅读。因此,为了阅读,建议在大多数具有用户友好界面的Web浏览器中打开它,以查看XML文档的结构。
  2. 仍然可能创建格式不正确的 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.