I have a file that consists of concatenated valid XML documents. I’d like to separate individual XML documents efficiently.
Contents of the concatenated file will look like this, thus the concatenated file is not itself a valid XML document.
<?xml version="1.0" encoding="UTF-8"?>
<someData>...</someData>
<?xml version="1.0" encoding="UTF-8"?>
<someData>...</someData>
<?xml version="1.0" encoding="UTF-8"?>
<someData>...</someData>
Each individual XML document around 1-4 KB, but there is potentially a few hundred of them. All XML documents correspond to same XML Schema.
Any suggestions or tools? I am working in the Java environment.
Edit: I am not sure if the xml-declaration will be present in documents or not.
Edit: Let’s assume that the encoding for all the xml docs is UTF-8.
As Eamon says, if you know the <?xml> thing will always be there, just break on that.
Failing that, look for the ending document-level tag. That is, scan the text counting how many levels deep you are. Every time you see a tag that begins with “<” but not “</” and that does not end with “/>”, add 1 to the depth count. Every time you see a tag that begins “</”, subtract 1. Every time you subtract 1, check if you are now at zero. If so, you’ve reached the end of an XML document.