查找关闭XML标记

时间:2013-03-20 15:39:18

标签: java xml parsing sax stax

我有一种方法只打印开始和结束XML标记之间的内容。我知道我的XML深度计数器是问题,但我无法弄清楚在哪里放/修复它。这是XML。

<XMS>
    <Object>
        <Property>
            <Value>1</Value>
        </Property>
    </Object>
</XMS>

这是Java代码......

    Boolean flag = false;

    while(reader.hasNext()) {
        eventType = reader.next();

        if(getEventType(eventType) == "START_ELEMENT" 
                && reader.getLocalName() == startTagName){
            flag = true;
            depth++;
            System.out.println(reader.getLocalName() + " Depth = " + depth);
        }
        else if(getEventType(eventType) == "END_ELEMENT"
                && flag == true
                && (depth == 0)){
            depth--;
            System.out.println(reader.getLocalName() + " Depth = " + depth + " BIG END");
            break;
        }
        else if(getEventType(eventType) == "START_ELEMENT"
                && flag == true){
            depth++;
            System.out.println(reader.getLocalName() + " Depth = " + depth);
        }
        else if(getEventType(eventType)== "END_ELEMENT"
                && flag == true){
            depth--;
            System.out.println(reader.getLocalName() + " Depth = " + depth + " END");
        }
    }
}

GetEventType只返回正确的eventType(正常工作)。这是控制台的输出。

Object Depth = 1
Property Depth = 2
Value Depth = 3
Value Depth = 2 END
Property Depth = 1 END
Object Depth = 0 END
XMS Depth = -1 BIG END

问题是它应该在深度= 0时在最后一个对象上结束并在到达XMS深度= -1之前停止。任何建议?

3 个答案:

答案 0 :(得分:1)

它可以像比较深度等于1而不是零一样简单吗?

当你在“Object”元素中时,你的深度== 1,因此当你遇到结束的“Object”标签时你应该检查

   ... && (depth == 1)

答案 1 :(得分:0)

EventType是int而非String,您正在与错误的值进行比较。另外,您不使用==比较java中的字符串,而是使用equals()。另外,flag应该是boolean(原始)。

作为未来的注释,遇到这样的问题时,学会在调试器中运行代码以找到逻辑问题,而不是在SO上发布。

答案 2 :(得分:0)

在您的代码中

    else if(getEventType(eventType) == "END_ELEMENT"
                    && flag == true
                    && (depth == 0)){
                depth--;
//rest of your code

您的if条件是(depth == 0)作为条件之一,并且在您正在执行的方法正文中depth--;。不会将深度减少到-1吗?

我的问题是:如果你有depth--;,你真的需要if (depth == 0)吗?