Java xml解析 - 定位特定结果:

时间:2012-05-11 18:26:27

标签: java api parsing sax

所以过去几天我一直在玩Sax,而且我已经完全无法处理这个问题。

假设我有以下xml

<PowerSystemRegions>
<PowerSystemRegion>
    <RegionId>1</RegionId>
    <RegionName>New England</RegionName>
    <Status>Normal</Status>
    <DateUpdated>2011-12-22T10:55:51.000-05:00</DateUpdated>
</PowerSystemRegion>
<PowerSystemRegion>

我想首先检查以确保区域名称是New England,然后根据该状态拉出状态,但我不认为它会加载下一个qName或任何东西,因为它会再次调用主

这是我到目前为止所拥有的,但我完全被卡住了:

public void startElement (String uri, String name, String qName, Attributes atts) {
    boolean region = false;
    boolean regionName = false;
    boolean regionStatus = false;

    if (qName.compareTo("RegionName") == 0) {
        region = true;
        if(atts.getValue(0).compareTo("New England") == 0){

        }

        if (currentStatus == null){
        String cCond = atts.getValue(0);
        currentStatus = cCond;
        }   
    }
}

我的想法是比较名称,一旦设置了所有3个布尔值,我就没事了......但是后来我觉得由于字符串中只有一个qName而无法正常工作。哈尔普?

1 个答案:

答案 0 :(得分:0)

我和萨克斯一起工作已经有一段时间,但我会尝试: 您可以添加处理程序字段,如:

public class SaxHandler {
    Integer regionId;
    String regionName;
    String regionStatus;

    (...)
}

所以,在你的start元素中,你可以创建类似的东西:

public void startElement (String uri, String name, String qName, Attributes atts) {
    if (qname.equals("RegionName") {
        regionName = atts.getValue(0);
    }
    if (qname.equals("RegionId") {
        regionId = Integer.parseInt(atts.getValue(0));
    }
    if (qname.equals ("Status") {
        if(regionName.equals ("New England")) {
            //Do what you want here
        }

    }

}

顺便说一句,它的使用等于而不是compareTo。只有在对元素进行排序时才使用compareTo;)

编辑:在对象中思考,更好地使用类,而不是像我一样使用类。使用PowerSystem对象从xml收集数据;)