0

XML プル パーサーを使用して XML ファイルを読み取り、DocDecl 要素 (ファイルの先頭にある .

ここに私が使用しているコードがあります、

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();
}

そして、これが私が得る結果のlogcatです:

START_DOCUMENT START_TAG START_TAG テキスト END_TAG START_TAG テキスト END_TAG コメント END_DOCUMENT

次のxmlで

<?xml version="1.0" encoding="utf-8"?>
<root>
    <item>Some text</item>
    <item>Some other text</item>
    <!-- Here's a comment -->
</root>

FEATURE_PROCESS_DOCDECL と nextToken() を使用してすべてを確実に読み取っていますが、DocDecl は処理されません。何か不足していますか?

4

1 に答える 1

0

DOCDECL トークンを xml ファイルの先頭のタグと間違えましたが、DOCTYPE 宣言に使用されています。

私が望んでいたことを達成するために、xml からバージョン、エンコーディングなどを取得するには、次のコードを使用できます。

public static final String PROPERTY_XML_VERSION = "http://xmlpull.org/v1/doc/properties.html#xmldecl-version";
public static final String PROPERTY_XML_STANDALONE = "http://xmlpull.org/v1/doc/properties.html#xmldecl-standalone";

// [...] 

int eventType = xpp.getEventType();

while (eventType != XmlPullParser.END_DOCUMENT) {
}

String version = (String) xpp.getProperty(PROPERTY_XML_VERSION);
Boolean standalone = (Boolean) xpp.getProperty(PROPERTY_XML_STANDALONE);
String encoding = xpp.getInputEncoding();

XmlPullParser Docを読んだほうがいい

于 2012-09-26T13:00:41.297 に答える