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

标签 java xml stax

我在使用 stax 从 xml 获取特定信息时遇到问题。在我的 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);
}

我需要添加/更改什么才能仅获取此阅读器内“当前”的行程时间?

最佳答案

您只需跟踪您在文档中的位置即可。例如,通常的做法是保留一个元素名称堆栈:当您点击 startElement 时将名称压入堆栈,当您点击 endElement 时将其弹出,然后检查堆栈以发现当前正在处理的元素的上下文.

关于Java:如何使用 stax 从 xml 获取特定信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60071933/

相关文章:

java - 如何在 Java 中从 CSS 3 生成 PDF 文档

Java 简单串行连接器 (jSSC) : getInputBufferBytesCount returns zero

java - 在 XSLT 和 Java 类之间共享 XPath

java - 如何创建多级 xml 文件

xml - Powershell选择XML节点,其中属性包含在数组中

java - DOM、SAX 和 StAX XML 解析器之间有什么区别?

java - Android : file. isDirectory() 总是为文件返回 true,因此无法添加过滤器

java - 无法在 Sonar 中解析 'Untrusted XML should be parsed with a local, static DTD'

java - 使用StAX读取同名子节点

java - 连接到 Google Play 游戏时出错