Java XMLStreamException:使用StAX解析xml文件时,未找到要写入的元素:ArrayIndexOutOfBoundsException
在下面的xml文件中,我以{file1.c,{123434565079900,…}},{file2.c,{123434565079900,…}}格式在hashmap(源代码中命名为'ds')中有文件名及其相应的规则号,如果对于file1.c,Java XMLStreamException:使用StAX解析xml文件时,未找到要写入的元素:ArrayIndexOutOfBoundsException,java,xml,xml-parsing,sax,stax,Java,Xml,Xml Parsing,Sax,Stax,在下面的xml文件中,我以{file1.c,{123434565079900,…}},{file2.c,{123434565079900,…}}格式在hashmap(源代码中命名为'ds')中有文件名及其相应的规则号,如果对于file1.c,标记的xml文件中存在给定列表中的任何规则号(这里5087是匹配的)我想删除其父节点,即节点 <SourceFiles> **<File name="file1.c">** <FileSummary>
标记的xml文件中存在给定列表中的任何规则号(这里5087是匹配的)我想删除其父节点,即
节点
<SourceFiles>
**<File name="file1.c">**
<FileSummary>
<QAC>
<StatDev>0</StatDev>
<StatIntendDev>1</StatIntendDev>
</QAC>
<Developer>
<StatDev>0</StatDev>
<StatIntendDev>0</StatIntendDev>
<StatBlank>1</StatBlank>
</Developer>
<Total>
<TotalRank>intended deviation</TotalRank>
<StatDev>0</StatDev>
<StatIntendDev>1</StatIntendDev>
</Total>
</FileSummary>
**<Complain lfd="1">**
<Line>43</Line>
<Description>"#include statements"</Description>
<Rule>
**<QACRule>5087</QACRule>**
<CodingStd>18.1.</CodingStd>
<Deviation>true</Deviation>
</Rule>
<Ranking>
<QACRank>intended deviation</QACRank>
<DeveloperRank></DeveloperRank>
<TotalRank>intended deviation</TotalRank>
</Ranking>
<Comment>these includes must stay here at this position</Comment>
</Complain>
**<Complain lfd="2">**
<Line>140</Line>
<Description>"#include statements"</Description>
<Rule>
**<QACRule>55555</QACRule>**
<CodingStd>18.1.</CodingStd>
<Deviation>true</Deviation>
</Rule>
<Ranking>
<QACRank>intended deviation</QACRank>
<DeveloperRank></DeveloperRank>
<TotalRank>intended deviation</TotalRank>
</Ranking>
<Comment>these includes must stay here at this position</Comment>
</Complain>
</File>
<File name="file2.c>
......
</File>
</SourceFiles>
****
0
1.
0
0
1.
预期偏差
0
1.
****
43
“#包含声明”
**5087**
18.1.
真的
预期偏差
预期偏差
这些人必须呆在这个位置上
****
140
“#包含声明”
**55555**
18.1.
真的
预期偏差
预期偏差
这些人必须呆在这个位置上
您正在同时进行stax解析和写入,可能需要处理更多的上下文。当您检测到isignorecomplannode=true
时,已经太晚了,因为您已经在输出上写入了与以下内容对应的事件:
<Complain lfd="1">
<Line>43</Line>
<Description>"#include statements"</Description>
<Rule>
<QACRule>
43
“#包含声明”
如果要在输出中避免这些事件,则应在列表中收集从
打开到
关闭之间的事件,当您到达
关闭时:选中isIgnoreComplainNode
:
- 如果为false,则将列表中的所有事件添加到eventWriter中(按相同顺序)
- 如果是真的,什么也不做
清除列表并继续解析
主要问题是“如何避免在输出中写入不需要的
节点”和“如何在上面删除
节点”。如果您将事件发送给eventWriter,则返回已为时过晚
<Complain lfd="1">
<Line>43</Line>
<Description>"#include statements"</Description>
<Rule>
<QACRule>