在 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. .. ?
稳固但可行的解决方案是创建一个小型状态机,在事件发生时捕获事件并相应地改变状态
- 如果进入汽车节点-存储汽车参考
- 如果输入所有者节点并且您之前已经输入过汽车节点,则存储汽车的所有者
- 退出汽车节点时returncar-owner对
- 重复并处理嵌套 and/or 节点级别以仅接受 car>owner。
我正在尝试读取大型 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. .. ?
稳固但可行的解决方案是创建一个小型状态机,在事件发生时捕获事件并相应地改变状态
- 如果进入汽车节点-存储汽车参考
- 如果输入所有者节点并且您之前已经输入过汽车节点,则存储汽车的所有者
- 退出汽车节点时returncar-owner对
- 重复并处理嵌套 and/or 节点级别以仅接受 car>owner。