0

所以过去几天我一直在玩 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>

我想首先检查以确保区域名称是新英格兰,然后根据该名称提取状态,但我认为它不会加载下一个 qName 或任何内容,因为它会再次从 main 调用。

到目前为止,这是我所拥有的,但我完全陷入了困境:

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,它不会那样工作……Halp?

4

1 回答 1

0

自从我使用 sax 以来已经有一段时间了,但我会尝试:您可以在处理程序字段中添加,例如:

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

    (...)
}

因此,在您的起始元素中,您可以执行以下操作:

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
        }

    }

}

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

编辑:考虑对象,更好地使用类,而不是像我那样使用字段。使用 PowerSystem 对象从 xml 收集数据;)

于 2012-05-11T19:10:53.213 回答