Skip to content

Instantly share code, notes, and snippets.

@iamrahulroy
Created June 9, 2025 07:06
Show Gist options
  • Save iamrahulroy/d20e42957309d6889a3e538d4dbaa91a to your computer and use it in GitHub Desktop.
Save iamrahulroy/d20e42957309d6889a3e538d4dbaa91a to your computer and use it in GitHub Desktop.
Java xml file parser
import javax.xml.stream.*;
import javax.xml.stream.events.XMLEvent;
import java.io.*;
public class SplitXmlByMessage {
public static void main(String[] args) throws Exception {
String inputFile = "input.xml"; // Path to your XML file
String outputDir = "output_messages"; // Directory to save message files
// Create output directory if it doesn't exist
new File(outputDir).mkdirs();
// Read the file, remove XML declarations, and wrap with a root element
StringBuilder sb = new StringBuilder();
sb.append("<root>\n");
try (BufferedReader br = new BufferedReader(new FileReader(inputFile))) {
String line;
while ((line = br.readLine()) != null) {
// Skip XML declaration lines
if (!line.trim().startsWith("<?xml")) {
sb.append(line).append("\n");
}
}
}
sb.append("</root>");
// Parse the wrapped XML
XMLInputFactory factory = XMLInputFactory.newInstance();
XMLEventReader reader = factory.createXMLEventReader(new StringReader(sb.toString()));
int messageCount = 0;
boolean insideMessage = false;
StringWriter messageWriter = null;
XMLOutputFactory outputFactory = XMLOutputFactory.newInstance();
XMLEventWriter xmlEventWriter = null;
while (reader.hasNext()) {
XMLEvent event = reader.nextEvent();
if (event.isStartElement() && event.asStartElement().getName().getLocalPart().equals("message")) {
insideMessage = true;
messageWriter = new StringWriter();
xmlEventWriter = outputFactory.createXMLEventWriter(messageWriter);
xmlEventWriter.add(event); // Write the start <message> tag
} else if (insideMessage) {
xmlEventWriter.add(event);
if (event.isEndElement() && event.asEndElement().getName().getLocalPart().equals("message")) {
// End of <message>
insideMessage = false;
xmlEventWriter.close();
messageCount++;
// Write to file
String outputFileName = outputDir + "/message_" + messageCount + ".xml";
try (FileWriter fw = new FileWriter(outputFileName)) {
fw.write(messageWriter.toString());
}
}
}
}
reader.close();
System.out.println("Done! " + messageCount + " message files created in " + outputDir);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment