Android: определение области действия тега с помощью XmlPullParser - PullRequest
0 голосов
/ 12 июля 2020

, как указано в заголовке, с помощью следующей функции можно получить теги файла XML:

public static void parseXML(Context context) {
        XmlPullParserFactory parserFactory;
        try {
            parserFactory = XmlPullParserFactory.newInstance();
            XmlPullParser parser = parserFactory.newPullParser();
            InputStream is = context.getAssets().open("example.xml");
            parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
            parser.setInput(is, null);

            processParsing(parser);

        } catch (XmlPullParserException e) {

        } catch (IOException e) {
        }
}

public static void processParsing(XmlPullParser parser) throws IOException, XmlPullParserException{
        int eventType = parser.getEventType();

        while (eventType != XmlPullParser.END_DOCUMENT) {
            String eltName = null;

            switch (eventType) {
                case XmlPullParser.START_TAG:
                    eltName = parser.getName();

                    System.out.println(eltName); //Delievers the TAG-Name
                    break;
            }

            eventType = parser.next();
        }
    }

XML: пример. xml

<data>
    <daten>
        <id> 122 </id>
        <name>ExampleName</name>
        <wert>154</wert>
        <exmpl>dsadas</exmpl>
        <datei>
            <id> 10 </id>
            <name>ExampleName 2</name>
            <wert>122</wert>
            <exmpl>gdasdas</exmpl>
        </datei>
    </daten>
</data>

Проблема: как видите, есть несколько тегов: id, name, wert, exmpl.

Вопрос: Как узнать, что при синтаксическом анализе, нахожусь ли я во внешнем объеме, или?

1 Ответ

0 голосов
/ 12 июля 2020

Простой способ достичь, который составляет абсолютный путь с помощью стека. Имя элемента Pu sh в START_TAG и вставьте его в END_TAG. Соединив все строки в стеке, вы можете получить абсолютный путь элемента в дереве xml. например, «data / daten / id», «data / daten / datei / id» и т. д. c.

public static void processParsing(XmlPullParser parser) throws IOException, XmlPullParserException{
    int eventType = parser.getEventType();
    Stack<String> stack = new Stack<>();

    while (eventType != XmlPullParser.END_DOCUMENT) {
        String eltName = null;

        switch (eventType) {
            case XmlPullParser.START_TAG:
                eltName = parser.getName();
                stack.push(eltName);

                String absPath = TextUtils.join("/", stack);
                System.out.println(absPath);

               // System.out.println(eltName); //Delievers the TAG-Name
                break;
            case XmlPullParser.END_TAG:
                stack.pop();
                break;
        }

        eventType = parser.next();
    }
}
...