简体   繁体   English

Java:如何使用 stax 从 xml 中获取特定信息

[英]Java: How to get specific information from xml using stax

I am having trouble with getting specific information from my xml using stax.我无法使用 stax 从我的 xml 中获取特定信息。 Inside my xml I have a current and average which both have a traveltime inside them.在我的 xml 中,我有一个电流和平均值,它们里面都有一个旅行时间。 But I only want to get the traveltime from the current and not from the average.但我只想从电流而不是平均值中获得旅行时间。 Here is how my xml looks like:这是我的 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>

The code that I have currently looks like this:我目前拥有的代码如下所示:

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

What do I need to add / change to only get the traveltime from 'current' inside this reader?我需要添加/更改什么才能仅从该阅读器中的“当前”获取旅行时间?

You just have to keep track of where you are in the document.您只需要跟踪您在文档中的位置。 For example, it's common practice to keep a stack of element names: push a name onto the stack when you hit a startElement, pop it off when you hit endElement, and then inspect the stack to discover the context of the element you are currently processing.例如,通常的做法是保留一个元素名称堆栈:当您点击 startElement 时将名称压入堆栈,当您点击 endElement 时将其弹出,然后检查堆栈以发现您当前正在处理的元素的上下文.

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM