I’m using an XML pull parser to read XML files, and I want to read the DocDecl element (the at the begining of the file.
Here’s the code I’m using,
FileInputStream inputStream;
XmlPullParserFactory factory;
XmlPullParser xpp;
XmlNode document;
inputStream = new FileInputStream(file);
factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
factory.setFeature(XmlPullParser.FEATURE_PROCESS_DOCDECL, true);
xpp = factory.newPullParser();
xpp.setInput(inputStream, null);
int eventType = xpp.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
switch (eventType) {
case XmlPullParser.START_DOCUMENT:
Log.i("Test XML", "START_DOCUMENT");
break;
case XmlPullParser.END_DOCUMENT:
Log.i("Test XML", "END_DOCUMENT");
break;
case XmlPullParser.START_TAG:
Log.i("Test XML", "START_TAG");
break;
case XmlPullParser.END_TAG:
Log.i("Test XML", "END_TAG");
break;
case XmlPullParser.TEXT:
Log.i("Test XML", "TEXT");
break;
case XmlPullParser.CDSECT:
Log.i("Test XML", "CDSECT");
break;
case XmlPullParser.ENTITY_REF:
Log.i("Test XML", "ENTITY_REF");
break;
case XmlPullParser.IGNORABLE_WHITESPACE:
Log.i("Test XML", "IGNORABLE_WHITESPACE");
break;
case XmlPullParser.PROCESSING_INSTRUCTION:
Log.i("Test XML", "PROCESSING_INSTRUCTION");
break;
case XmlPullParser.COMMENT:
Log.i("Test XML", "COMMENT");
break;
case XmlPullParser.DOCDECL:
Log.i("Test XML", "DOCDECL");
break;
default:
break;
}
eventType = xpp.nextToken();
}
And here’s the result logcat I get :
START_DOCUMENT
START_TAG
START_TAG
TEXT
END_TAG
START_TAG
TEXT
END_TAG
COMMENT
END_DOCUMENT
with the following xml
<?xml version="1.0" encoding="utf-8"?>
<root>
<item>Some text</item>
<item>Some other text</item>
<!-- Here's a comment -->
</root>
I’m using the FEATURE_PROCESS_DOCDECL, as well as the nextToken() to be sure to read everything, yet the DocDecl is not processed. Am I missing something ?
I mistook the DOCDECL token for the tag at the beggining of an xml file, but it is used for DOCTYPE Declaration.
To achieve what I wanted, get the version, encoding and such from the xml, the following code can be used :
I should have better read the XmlPullParser Doc