StAX Parser:重复的节点名称和特定注释

时间:2015-04-13 18:51:38

标签: stax

我尝试使用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解析器,很容易处理dublicate节点名称和评论,不幸的是我现在必须使用StAX并且我不知道如何解决这些问题:(

1 个答案:

答案 0 :(得分:0)

  1. 第一个问题:两个节点具有相同的名称
  2. <v> 2.74 </v><v> 1.63 </v>
    

    StAX没有问题,如果您按照顺序完成事件:

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

    因此,您需要在代码中处理最少的上下文信息,以确定它是第一次还是第二次启动<v>元素。

    1. 第二个问题:阅读评论
    2. 也没有问题,StAX解析也会触发注释事件,您可以简单地将注释作为String与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
          }
      }