【问题标题】:Writing xml string with StAX使用 StAX 编写 xml 字符串
【发布时间】:2016-03-10 17:53:30
【问题描述】:

是否可以直接使用 StAX 编写 xml 块? 我知道我可以将XMLStreamWriterwriteStartElementwriteCharacterswriteEndElement 一起使用,但xml 字符串没有灵活性。

考虑到我必须编写一个大的 xml 文件 (> 100 MB),我该如何解决这个限制。

我有像这样的任意 xml 字符串,有时结构相当复杂,需要与其他一些细节一起添加以形成最终的 xml 文件。这只是一个示例,不是实际的 xml 字符串。

<food>
<name>Strawberry Belgian Waffles</name>
<price>$7.95</price>
<description>
Light Belgian waffles covered with strawberries and whipped cream
</description>
<calories>900</calories>
</food>

【问题讨论】:

    标签: java jaxb stax


    【解决方案1】:

    虽然XMLStreamWriter 上有一个方法writeCharacters(),但这并不能满足您的要求。毕竟是逃避'&lt;', '&gt;', '&amp;'

    由于您已经在内存中拥有 XML 字符串,因此您可能会求助于 hack。

    当您需要编写原始 XML 时,请保留对底层编写器的引用并执行以下操作:

    // somewhere before:
    Writer underlyingWriter = /* get the underlying writer from somewhere */;
    XMLStreamWriter xmlStreamWriter = factory.createXmlStreamWriter(underlyingWriter);
    
    xmlStreamWriter.flush();
    underlyingWriter.write(rawXML);
    underlyingWriter.flush();
    // carry on using the XMLStreamWriter
    

    您需要在使用底层编写器之前刷新 xmlStreamWriter 以确保元素的正确顺序。此外,出于完全相同的原因,您应该刷新基础编写器。

    【讨论】:

      猜你喜欢
      • 2016-05-14
      • 2011-06-06
      • 2016-03-04
      • 2015-06-04
      • 2012-03-19
      • 1970-01-01
      • 1970-01-01
      • 2011-05-20
      • 1970-01-01
      相关资源
      最近更新 更多