Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java XMLStreamException:使用StAX解析xml文件时,未找到要写入的元素:ArrayIndexOutOfBoundsException_Java_Xml_Xml Parsing_Sax_Stax - Fatal编程技术网

Java XMLStreamException:使用StAX解析xml文件时,未找到要写入的元素:ArrayIndexOutOfBoundsException

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文件中,我以{file1.c,{123434565079900,…}},{file2.c,{123434565079900,…}}格式在hashmap(源代码中命名为'ds')中有文件名及其相应的规则号,如果对于file1.c,
标记的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>