Java: Как получить конкретную c информацию из xml, используя stax - PullRequest
0 голосов
/ 05 февраля 2020

У меня проблемы с получением конкретной c информации из моего xml с использованием stax. Внутри моего xml у меня есть ток и среднее, которые оба имеют время в пути. Но я только хочу получить время в пути от текущего, а не от среднего. Вот как выглядит мой xml:

<allroutes>
    <routes>    
        <route identification="id_1">
            <current>
                <traveltime time="1187" trustworthy="j" />
                <delay time="0" trustworthy="j" />
            </current>
            <average>
                <traveltime time="1187" trustworthy="j" />
                <delay time="0" trustworthy="j" />
            </average>
        </route>
        <route identification="id_2">
            <current>
                <traveltime time="995" trustworthy="j" />
                <delay time="0" trustworthy="j" />
            </current>
            <average>
                <traveltime time="995" trustworthy="j" />
                <delay time="0" trustworthy="j" />
            </average>
        </route>
    </routes>
    <subpaths>
        <subpath identification="id_1">
            <current>
                <traveltime time="0" trustworthy="n" />
                <delay time="0" trustworthy="n" />
            </current>
            <average>
                <traveltime time="0" trustworthy="n" />
                <delay time="0" trustworthy="n" />
            </average>
        </subpath>
        <subpath identification="id_2">
            <current>
                <traveltime time="0" trustworthy="n" />
                <delay time="0" trustworthy="n" />
            </current>
            <average>
                <traveltime time="0" trustworthy="n" />
                <delay time="0" trustworthy="n" />
            </average>
        </subpath>
    </subpaths>
</allroutes>

Код, который у меня сейчас есть, выглядит следующим образом:

try{
    while (streamReader.hasNext()) {
        streamReader.next();
        if (streamReader.getEventType() == XMLStreamReader.START_ELEMENT) {

            switch (streamReader.getLocalName()) {
            case "route":
                //store which type
                break;
            case "subpath":
                //store which type
                break;
            case "traveltime":
                //store traveltime
                break;
            }
        }

        if (streamReader.getEventType() == XMLStreamReader.END_ELEMENT && "allroutes".equals(streamReader.getLocalName())) {

            //stop the loop and give back the object
        }
    }
}catch(XMLStreamException ex) {
    LOGGER.log(Level.SEVERE, "XMLStreamException: " + ex);
}

Что мне нужно добавить / изменить, чтобы получить только время в пути от «текущего» внутри этого считывателя?

1 Ответ

1 голос
/ 05 февраля 2020

Вы просто должны отслеживать, где вы находитесь в документе. Например, обычной практикой является сохранение стека имен элементов: pu sh имя в стеке, когда вы нажимаете startElement, выталкивание его при нажатии endElement, а затем проверка стека, чтобы обнаружить контекст элемента, который вы В настоящее время обрабатывают.

...