在 java 中播放 xml

Streaming xml in java

我正在尝试读取大型 XML 文件,我只想读取车主,但我无法将整个 xml 加载到内存中,该怎么做?

XML 文件:

  <root>
    <message>
        <car>
            <owner>adam</owner>
        </car>
        <desk>
            <owner>sam</owner>
            <game>
               <owner>dorothy</owner>
            </game>
            <pen>
               <owner>dorothy</owner>
            </pen>
        </desk>
    </message>
</root>

例如,这段代码并不知道它到底读的是什么..如何确定我们读的是车主?

 XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance();
        XMLEventReader reader = xmlInputFactory.createXMLEventReader(new FileInputStream(entry.toFile()));

        while (reader.hasNext()) {
            XMLEvent nextEvent = reader.nextEvent();

            if (nextEvent.isStartElement()) {
                StartElement startElement = nextEvent.asStartElement();
                log.info(startElement.getName().toString());

                switch (startElement.getName().getLocalPart()) {
                    case "owner":
                        // whose owner. .. ?

稳固但可行的解决方案是创建一个小型状态机,在事件发生时捕获事件并相应地改变状态

  1. 如果进入汽车节点-存储汽车参考
  2. 如果输入所有者节点并且您之前已经输入过汽车节点,则存储汽车的所有者
  3. 退出汽车节点时returncar-owner对
  4. 重复并处理嵌套 and/or 节点级别以仅接受 car>owner。