Java中StAX的XMLStreamWriter可高效流式写XML,需通过XMLOutputFactory创建并绑定UTF-8编码的OutputStreamWriter;按顺序调用writeStartDocument、writeStartElement、writeCharacters等方法构建结构,支持CDATA、注释等;须flush()和close(),推荐try-with-resources管理资源。
Java中使用St
AX(Streaming API for XML)的XMLStreamWriter可以高效、低内存地流式写入XML到文件,适合处理大文件或需边生成边输出的场景。
需通过XMLOutputFactory获取写入器,并绑定到FileOutputStream或Writer(推荐用带UTF-8编码的OutputStreamWriter,避免中文乱码):
FileOutputStream时,XMLStreamWriter默认使用平台默认编码,易出问题new OutputStreamWriter(new FileOutputStream("out.xml"), StandardCharsets.UTF_8)
factory.setProperty("javax.xml.stream.isRepairingNamespaces", true)自动处理命名空间冲突按XML语法顺序调用方法:先写声明,再写开始标签、内容、结束标签。关键方法包括:
writeStartDocument():写入
writeStartElement("tag"):写入;支持带命名空间:writeStartElement("ns", "tag", "http://example.com/ns")
writeAttribute("name", "value"):在当前开始标签内写属性writeCharacters("text"):写PCDATA(注意会自动转义、&等)
writeEndElement():写;writeEndDocument()收尾StAX支持标准XML构造块,但需注意调用时机(必须在元素内或文档级):
writeCData("content"):生成,不转义内部字符writeComment("this is a comment"):生成
writeProcessingInstruction("xml-stylesheet", "type=\"text/xsl\" href=\"style.xsl\"")flush()和close(),否则缓冲区内容可能丢失StAX写入过程抛出XMLStreamException(运行时异常),需捕获或声明。推荐用try-with-resources确保关闭:
XMLStreamWriter和底层Writer都放入try语句中close(),防止文件句柄泄漏