Java “创建XML文档”;萨克斯风格;?
我需要将一个(可能很大的)XML文档直接发送到一个流,所以我想采用“SAX风格”——流式方式,文档在传输过程中通过有线发送——而不是“DOM风格”——以批处理方式,文档构建在内存中,然后在最后通过有线发送。我相信这很容易做到,但我找不到适合我一生的好教程。提前感谢您的建议 编辑说得很清楚,我不太清楚应该使用哪个XML API,只要它在构建文档时通过网络发送文档,而不是在内存中构建整个文档。我倾向于使用它来生成XML,而不是SAX—API更易于使用。XML是流式的,不保存在内存中 例如:Java “创建XML文档”;萨克斯风格;?,java,xml,sax,Java,Xml,Sax,我需要将一个(可能很大的)XML文档直接发送到一个流,所以我想采用“SAX风格”——流式方式,文档在传输过程中通过有线发送——而不是“DOM风格”——以批处理方式,文档构建在内存中,然后在最后通过有线发送。我相信这很容易做到,但我找不到适合我一生的好教程。提前感谢您的建议 编辑说得很清楚,我不太清楚应该使用哪个XML API,只要它在构建文档时通过网络发送文档,而不是在内存中构建整个文档。我倾向于使用它来生成XML,而不是SAX—API更易于使用。XML是流式的,不保存在内存中 例如: XMLS
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();
}
XMLStreamWriter w=XMLOutputFactory.newInstance().createXMLStreamWriter(System.out);
尝试
{
w、 writeStartDocument();
w、 WriteStarteElement(“根”);
对于(int i=0;i<1000;i++)
{
w、 书面声明(“编号”);
w、 writeCharacters(String.valueOf(i));
w、 writeEndElement();//编号
}
w、 writeEndElement();//根
w、 writeEndDocument();
}
最后
{
w、 close();
}
我倾向于使用它来生成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();
}
XMLStreamWriter w=XMLOutputFactory.newInstance().createXMLStreamWriter(System.out);
尝试
{
w、 writeStartDocument();
w、 WriteStarteElement(“根”);
对于(int i=0;i<1000;i++)
{
w、 书面声明(“编号”);
w、 writeCharacters(String.valueOf(i));
w、 writeEndElement();//编号
}
w、 writeEndElement();//根
w、 writeEndDocument();
}
最后
{
w、 close();
}
您的最佳方法可能取决于数据的来源。它是从内存开始的吗?您是否从外部源(如服务或数据库)检索数据
如果要转换大量对象,比如数据库中的查询,那么进行简单对象到XML转换的对象序列化程序(比如Jackson)可能仍然符合低内存消耗的目标——您只需迭代应用它。打开流,读取一行,序列化它,将其输出到流,读取下一行,序列化它,等等。您始终保持相同的输出流打开,但内存中的XML代码量始终保持较小。您的最佳方法可能取决于数据的来源。它是从内存开始的吗?您是否从外部源(如服务或数据库)检索数据
如果要转换大量对象,比如数据库中的查询,那么进行简单对象到XML转换的对象序列化程序(比如Jackson)可能仍然符合低内存消耗的目标——您只需迭代应用它。打开您的流,读取一行,序列化它,将其输出到流,读取下一行,序列化它,等等。您始终保持相同的输出流处于打开状态,但内存中的XML代码量始终保持较小。签出签出我所要的内容。谢谢正是我想要的。谢谢