首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将XML (String)附加到已经创建文档开始的XmlEventWriter (StAX)

如何将XML (String)附加到已经创建文档开始的XmlEventWriter (StAX)
EN

Stack Overflow用户
提问于 2017-03-05 02:19:30
回答 1查看 2.3K关注 0票数 2

为了创建大型的StAX文件,我们决定使用XML。基本结构是通过使用低级api构建的: createStartDocument()、createStartElement()。这如预期的那样起作用。

但是,在某些情况下,我们希望附加驻留在字符串中的现有XML数据(从数据库检索)。下面的片段说明了这一点:

代码语言:javascript
运行
复制
import java.lang.*;
import java.io.*;
import javax.xml.stream.*;

public class Example {
    public static void main(String... args) throws XMLStreamException {
        XMLOutputFactory outputFactory = XMLOutputFactory.newInstance();
        XMLInputFactory inputFactory = XMLInputFactory.newInstance();
        XMLEventFactory eventFactory = XMLEventFactory.newInstance();

        StringWriter writer = new StringWriter();
        XMLEventWriter eventWriter = outputFactory.createXMLEventWriter(writer);

        eventWriter.add(eventFactory.createStartDocument("UTF-8", "1.0"));
        eventWriter.add(eventFactory.createStartElement("ns0", "http://example.org", "root"));
        eventWriter.add(eventFactory.createNamespace("ns0", "http://example.org"));

        //In here, we want to append a piece of XML which is stored in a string variable.
        String xml = "<fragments><fragment><data>This is pure text.</data></fragment></fragments>";
        eventWriter.add(inputFactory.createXMLEventReader(new StringReader(xml)));

        eventWriter.add(eventFactory.createEndDocument());

        System.out.println(writer.toString());
    }
}

使用上面的代码,取决于实现,我们没有得到预期的结果:

  • Woodstox:引发以下异常:“无法输出XML声明,在输出已经完成之后”。XMLEventReader似乎从一个startDocument事件开始,但是由于startDocument事件已经通过编程方式触发,所以它会抛出错误。
  • JDK:它附加了<?xml version="1.0" ... <fragments><fragment>... ->,这导致了无效的XML。

我还试图通过以下方法追加XML:

代码语言:javascript
运行
复制
eventFactory.createCharacters(xml);

这里的问题是,即使XML被追加,<和>也被转换为< and >。因此,这将导致无效的XML。

我是否缺少了一个API,它允许我简单地将字符串附加为XML?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-05 08:02:55

如果有必要,您可以首先使用任何StartDocument:

代码语言:javascript
运行
复制
    String xml = "<fragments><fragment><data>This is pure text.</data></fragment></fragments>";
    XMLEventReader xer = inputFactory.createXMLEventReader(new StringReader(xml));
    if (xer.peek().isStartDocument())
    {
        xer.nextEvent();
    }
    eventWriter.add(xer);
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42603731

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档