StAX 解析器:重复的节点名称和特定注释
StAX Parser : Duplicated Node name and specific comments
我尝试使用 StAX 解析器解析 xml 文件,但我遇到了两个问题:
第一:两个节点同名
第二:阅读 values
之前的确切注释
<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 解析器,很容易处理重复的节点名称和注释,不幸的是我现在必须使用 StAX,我不知道如何解决这些问题:(
- 第一期:两个节点同名
<v> 2.74 </v><v> 1.63 </v>
StAX 没有问题,如果您按照事件顺序进行操作,您会得到:
- 开始元素 ( v )
- 字符 ( 2.74 )
- endElement ( v )
- 开始元素 ( v )
- 字符 ( 1.63 )
- endElement ( v )
因此,您需要在代码中处理最少的上下文信息,以了解您是第一次还是第二次启动 <v>
元素。
- 第二期:阅读评论
也没有问题,StAX 解析也会触发评论事件,您可以简单地将评论作为带有 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
}
}
我尝试使用 StAX 解析器解析 xml 文件,但我遇到了两个问题: 第一:两个节点同名 第二:阅读 values
之前的确切注释<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 解析器,很容易处理重复的节点名称和注释,不幸的是我现在必须使用 StAX,我不知道如何解决这些问题:(
- 第一期:两个节点同名
<v> 2.74 </v><v> 1.63 </v>
StAX 没有问题,如果您按照事件顺序进行操作,您会得到:
- 开始元素 ( v )
- 字符 ( 2.74 )
- endElement ( v )
- 开始元素 ( v )
- 字符 ( 1.63 )
- endElement ( v )
因此,您需要在代码中处理最少的上下文信息,以了解您是第一次还是第二次启动 <v>
元素。
- 第二期:阅读评论
也没有问题,StAX 解析也会触发评论事件,您可以简单地将评论作为带有 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
}
}