Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java “创建XML文档”;萨克斯风格;?_Java_Xml_Sax - Fatal编程技术网

Java “创建XML文档”;萨克斯风格;?

Java “创建XML文档”;萨克斯风格;?,java,xml,sax,Java,Xml,Sax,我需要将一个(可能很大的)XML文档直接发送到一个流,所以我想采用“SAX风格”——流式方式,文档在传输过程中通过有线发送——而不是“DOM风格”——以批处理方式,文档构建在内存中,然后在最后通过有线发送。我相信这很容易做到,但我找不到适合我一生的好教程。提前感谢您的建议 编辑说得很清楚,我不太清楚应该使用哪个XML API,只要它在构建文档时通过网络发送文档,而不是在内存中构建整个文档。我倾向于使用它来生成XML,而不是SAX—API更易于使用。XML是流式的,不保存在内存中 例如: XMLS

我需要将一个(可能很大的)XML文档直接发送到一个流,所以我想采用“SAX风格”——流式方式,文档在传输过程中通过有线发送——而不是“DOM风格”——以批处理方式,文档构建在内存中,然后在最后通过有线发送。我相信这很容易做到,但我找不到适合我一生的好教程。提前感谢您的建议

编辑说得很清楚,我不太清楚应该使用哪个XML API,只要它在构建文档时通过网络发送文档,而不是在内存中构建整个文档。

我倾向于使用它来生成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,而不是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代码量始终保持较小。

签出签出我所要的内容。谢谢正是我想要的。谢谢