创建XML文档“SAX样式”?

时间:2013-04-01 23:37:37

标签: java xml sax

我需要将一个(可能很大的)XML文档直接发送到流中,所以我想以流式方式“SAX样式” - 当我去的时候通过网络发送文档 - - 与“DOM风格”相反 - 以批量方式,文档在内存中构建,然后在最后通过线路发送。我确信这很容易做到,但是我找不到一本关于我生活的好教程。提前感谢您的建议。

编辑为了清楚起见,我并不特别关注使用哪种XML API,只要它在构建时通过网络发出文档而不是在内存中构建整个文档。

2 个答案:

答案 0 :(得分:4)

我倾向于使用StAX来生成XML而不是SAX - API更易于使用。 XML是流式传输的,不会保存在内存中。

示例:

XMLStreamWriter w = XMLOutputFactory.newInstance().createXMLStreamWriter(System.out);
try
{
    w.writeStartDocument();
    w.writeStartElement("root");
    for (int i = 0; i < 1000; i++)
    {
        w.writeStartElement("number");
        w.writeCharacters(String.valueOf(i));
        w.writeEndElement(); //number
    }
    w.writeEndElement(); //root
    w.writeEndDocument();
}
finally
{
    w.close();
}

答案 1 :(得分:0)

您最好的方法可能取决于您的数据来源。它是从内存开始的吗?您是从服务或数据库等外部源检索数据吗?

如果你正在转换一个大的对象列表,比如来自数据库的查询,那么对象序列化器(例如Jackson)可以完成简单的XML转换对象,这可能仍然符合你的低内存消耗目标 - 你只是迭代地应用它。打开你的流,读取一行,序列化它,输出到流,读取下一行,序列化它等。你保持相同的输出流打开整个时间,但生活在内存中的XML代码的数量总是保持不变小。