📜  Java StAX 中的 XMLStreamWriter

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

Java StAX 中的 XMLStreamWriter

Java 6 中添加的 XML 流 API 提供了一个方便的接口 XMLStreamWriter,用于编写 XML 文档。这个 API 不需要像 DOM 那样构建任何特定的对象结构,也不需要执行任何中间任务。它还默认支持命名空间,这在更高级的情况下非常有用。

下面列出了用于创建 XMLStreamWriter 对象并将数据写入其中的方法:

  • 写开始文档()
  • 写开始元素()
  • 写字符()
  • 写入结束元素()
  • writeEndDocument()

Java StAX中的XMLStreamWriter有一定的限制,主要有以下几点:

  1. 仍然可能创建格式不正确的 XML 文档,例如包含多个根元素或缺少命名空间定义。
  2. XMLStreamWriter 不会缩进其输出,因此使用纯文本编辑器可能有点难以阅读。因此,为了阅读,建议在大多数具有用户友好界面的Web浏览器中打开它,以查看XML文档的结构。

程序:

  1. 使用 XMLOutputFactory 创建 XMLStreamWriter 的实例
  2. 编写 XML 的标题并继续编写元素。
  3. 添加元素后,我们可以添加属性、字符数据或 CDATA
  4. 关闭打开的元素
  5. 清空元素或写评论
  6. 关闭并完成 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 树时。