100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > java stax_在Java中使用StAX的代码

java stax_在Java中使用StAX的代码

时间:2023-06-12 20:13:04

相关推荐

java stax_在Java中使用StAX的代码

我有以下形式的200 MB xml:

.....

.....

.....

我需要使用StAX将这个xml分成几个文件,这样n个学生就会进入每个xml文件,并且结构将保存为,然后保存和。学校和班级的属性也必须保留在最终的xml中。

这里是我使用的代码:

XMLInputFactory inputFactory = XMLInputFactory.newInstance();

String xmlFile = "input.XML";

XMLEventReader reader = inputFactory.createXMLEventReader(new FileReader(xmlFile));

XMLOutputFactory outputFactory = XMLOutputFactory.newInstance();

outputFactory.setProperty("javax.xml.stream.isRepairingNamespaces", Boolean.TRUE);

XMLEventWriter writer = null;

int count = 0;

QName name = new QName(null, "student");

try {

while (true) {

XMLEvent event = reader.nextEvent();

if (event.isStartElement()) {

StartElement element = event.asStartElement();

if (element.getName().equals(name)) {

String filename = "input"+ count + ".xml";

writer = outputFactory.createXMLEventWriter(new FileWriter(filename));

writeToFile(reader, event, writer);

writer.close();

count++;

}

}

if (event.isEndDocument())

break;

}

} catch (XMLStreamException e) {

throw e;

} catch (IOException e) {

e.printStackTrace();

} finally {

reader.close();

}

private static void writeToFile(XMLEventReader reader, XMLEvent startEvent, XMLEventWriter writer) throws XMLStreamException, IOException {

StartElement element = startEvent.asStartElement();

QName name = element.getName();

int stack = 1;

writer.add(element);

while (true) {

XMLEvent event = reader.nextEvent();

if (event.isStartElement() && event.asStartElement().getName().equals(name))

stack++;

if (event.isEndElement()) {

EndElement end = event.asEndElement();

if (end.getName().equals(name)) {

stack--;

if (stack == 0) {

writer.add(event);

break;

}

}

}

writer.add(event);

}

}请在try块中检查函数调用writeToFile(reader, event, writer)。这里读者对象只有student标签。我需要读者拥有school,class,然后是n students。因此生成的文件与原始文件具有相似的结构,但每个文件只有较少的子文件。

提前致谢。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。