java - How to modify a huge XML file by StAX? -
i have huge xml (~2gb) , need add new elements , modify old ones. example, have:
<books> <book>....</book> ... <book>....</book> </books> and want get:
<books> <book> <index></index> .... </book> ... <book> <index></index> .... </book> </books> i used following code:
xmlinputfactory infactory = xmlinputfactory.newinstance(); xmleventreader eventreader = infactory.createxmleventreader(new fileinputstream(file)); xmloutputfactory factory = xmloutputfactory.newinstance(); xmlstreamwriter writer = factory.createxmlstreamwriter(new filewriter(file, true)); while (eventreader.hasnext()) { xmlevent event = eventreader.nextevent(); if (event.geteventtype() == xmlevent.start_element) { if (event.asstartelement().getname().tostring().equalsignorecase("book")) { writer.writestartelement("index"); writer.writeendelement(); } } } writer.close(); but result following:
<books> <book>....</book> .... <book>....</book> </books><index></index> any ideas?
try this
xmlinputfactory infactory = xmlinputfactory.newinstance(); xmleventreader eventreader = infactory.createxmleventreader(new fileinputstream("1.xml")); xmloutputfactory factory = xmloutputfactory.newinstance(); xmleventwriter writer = factory.createxmleventwriter(new filewriter(file)); xmleventfactory eventfactory = xmleventfactory.newinstance(); while (eventreader.hasnext()) { xmlevent event = eventreader.nextevent(); writer.add(event); if (event.geteventtype() == xmlevent.start_element) { if (event.asstartelement().getname().tostring().equalsignorecase("book")) { writer.add(eventfactory.createstartelement("", null, "index")); writer.add(eventfactory.createendelement("", null, "index")); } } } writer.close(); notes
new filewriter(file, true) appending end of file, hardly need it
equalsignorecase("book") bad idea because xml case-sensitive
Comments
Post a Comment