【问题标题】:StAX Parser : Duplicated Node name and specific commentsStAX Parser:重复的节点名称和特定注释
【发布时间】:2015-04-13 18:51:37
【问题描述】:

我正在尝试使用 StAX 解析器解析 xml 文件,但我遇到了两个问题: 第一:两个节点同名 第二:阅读值之前的确切注释

<database>
<!-- 2015-03-10 01:29:00 EET / 130 --> <row><v> 2.74 </v><v> 1.63 </v></row>
<!-- 2015-03-10 01:30:00 EET / 170 --> <row><v> 5.33 </v><v> 1.68 </v></row>
<!-- 2015-03-10 01:31:00 EET / 180 --> <row><v> 7.62 </v><v> 1.83 </v></row>
<database>

我想收集这样的数据:

日期:2015-03-10 01:29:00

V1:2.74

V2:1.63

我以前使用 Dom 解析器,很容易处理重复的节点名称和 cmets,不幸的是我现在必须使用 StAX,我不知道如何解决这些问题 :(

【问题讨论】:

    标签: stax


    【解决方案1】:
    1. 第一期:两个节点同名
    <v> 2.74 </v><v> 1.63 </v>
    

    StAX 没有问题,如果您关注事件,您将按顺序获得:

    • startElement (v)
    • 字符 (2.74)
    • endElement (v)
    • startElement (v)
    • 字符(1.63)
    • endElement (v)

    因此,您可以在代码中处理最少的上下文信息,以了解您是第一次还是第二次启动 &lt;v&gt; 元素。

    1. 第二期:阅读cmets

    也没有问题,StAX 解析也会触发 cmets 的事件,您可以简单地使用 API 将注释作为字符串获取并提取自己的预期值,例如:

    XMLInputFactory inputFactory = XMLInputFactory.newInstance();
    XMLStreamReader streamReader = inputFactory.createXMLStreamReader(inputStream);
    while (streamReader.hasNext()) {
        int event = streamReader.next();
        if(event == XMLStreamConstants.COMMENT) {
            String aDateStringVal = streamReader.getText();
            // + extract your date value from the comment string
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2014-02-24
      • 2016-07-17
      • 2022-12-16
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多