set filter for STAX parser

Viewed 252

I am trying to split large XML file based on particular tag only (Department) here is the xml I am using

enter code here
<?xml version="1.0" encoding="UTF-8"?>
<Students>
<student>
    <name>Student1</name>
    <id>470230</id>
</student>
<student>
    <name>Student2</name>
    <id>25142</id>
</student>
<student>
    <name>Student3</name>
    <id>55624</id>
</student>
<Department>
    <name>Engineering</name>
    <id>2251</id>
</Department>
<Department>
    <name>Science</name>
    <id>3356</id>
</Department>
<Department>
    <name>Commerce</name>
    <id>2546</id>
</Department>
</Students>

and the code uses as below

import java.io.File;
import java.io.FileReader;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLStreamReader;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stax.StAXSource;
import javax.xml.transform.stream.StreamResult;

public class stax1 {

    public static void main(String[] args) throws Exception  {
        int i=1;
        XMLInputFactory xif = XMLInputFactory.newInstance();
        XMLStreamReader xsr = xif.createXMLStreamReader(new FileReader("D:/Temp/test.txt"));
        xsr.nextTag(); // Advance to statements element

        TransformerFactory tf = TransformerFactory.newInstance();
        Transformer t = tf.newTransformer();
        while(xsr.nextTag() == XMLStreamConstants.START_ELEMENT) {
            File file = new File("out/" + "out" +i+ ".xml");
            t.transform(new StAXSource(xsr), new StreamResult(file));
            i++;
        }
    }
}

can anyone correct me to split xml file only based on Department tag ? code currently using with STAX parser and file size is above 100 MB Currently I am getting output for all Student and Department but I am trying to get Department only.

0 Answers
Related