[英]Splitting Large XML FIles Java (StAX)
我正在使用這段代碼https://github.com/koen-serneels/blog/tree/master/BigXmlTest/src/main/java/be/error/bigxmltest來自GitHub來拆分大型XML文件(6GB)。提供基本的XML文件以了解程序。 程序輸出每個分割文件的標題。 我現在也嘗試為每個文件添加一個頁腳元素,並且遇到一些困難,有關如何執行此操作的任何建議或建議都很好。
我已經在模式中添加了頁腳,並在“ openOutputFileAndWriteHeader()”方法中編寫了添加頁腳的代碼。 但是,這會將頁腳添加到Content Element中。 如下圖所示:
private XMLEventWriter openOutputFileAndWriteHeader(int fileNumber) throws Exception
{
XMLEventFactory xmlEventFactory = XMLEventFactory.newInstance();
XMLOutputFactory xmlOutputFactory = XMLOutputFactory.newInstance();
xmlOutputFactory.setProperty(XMLOutputFactory.IS_REPAIRING_NAMESPACES, true);
XMLEventWriter writer = xmlOutputFactory.createXMLEventWriter(new FileOutputStream(new File("C:\\Users\\thamm\\Desktop\\SplitFiles\\File_" + fileNumber + ".xml")));
writer.setDefaultNamespace(DOCUMENT_NS);
writer.add(xmlEventFactory.createStartDocument());
writer.add(xmlEventFactory.createStartElement(new QName(DOCUMENT_NS, ROOT_ELEMENT), null, null));
HeaderType header = objectFactory.createHeaderType();
header.setSomeHeaderElement("List of Employees");
marshaller.marshal(new JAXBElement<HeaderType>(new QName(DOCUMENT_NS, HEADER_ELEMENT, ""), HeaderType.class,
HeaderType.class, header), writer);
writer.add(new StartElementEvent(new QName(DOCUMENT_NS, CONTENT_ELEMENT)));
FooterType footer = objectFactory.createFooterType();
footer.setSomeFooterElement("Footer");
marshaller.marshal(new JAXBElement<FooterType>(new QName(DOCUMENT_NS, FOOTER_ELEMENT,""), FooterType.class,
FooterType.class, footer), writer);
return writer;
}
輸出:
<?xml version='1.0' encoding='UTF-8'?>
<BigXmlTest xmlns="http://www.sidero.ie/bigxmltest">
<Header>
<SomeHeaderElement>List of Employees</SomeHeaderElement>
</Header>
<Content>
<Footer>
<SomeFooterElement>Footer</SomeFooterElement>
</Footer>
<Data>Data4</Data>
<Data>Data5</Data>
<Data>Data6</Data>
</Content>
</BigXmlTest>
方法名稱openOutputFileAndWriteHeader
暗示它將創建新文件。 頁腳不合適。
在第74行的BigXmlTestIteratorApi.java中 ,您可以看到代碼:
xmlEventWriter.close(); // Also closes any open Element(s) and the document
xmlEventWriter = openOutputFileAndWriteHeader(++fileNumber); // Continue with next file
dataRepetitions = 0;
要添加頁腳,您需要在關閉文件之前添加一些內容:
writeFooter(footer);
xmlEventWriter.close();
xmlEventWriter = openOutputFileAndWriteHeader(++fileNumber);
dataRepetitions = 0;
請注意,為每個文件創建FooterType
實例可能是多余的。 可以在外部循環(例如60行)上創建
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.