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などをロードするとは思いません.

これが私がこれまでに持っているものですが、私は完全に立ち往生しています:

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つしかないため、そのようには機能しないことに気付きました.

4

1 に答える 1

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の代わりにequalsを使用する方が適切です。要素を並べ替える場合にのみcompareToを使用してください;)

編集:私がしたようにフィールドの代わりに、オブジェクトで考えて、クラスをよりよく使用してください。PowerSystemオブジェクトを使用してxmlからデータを収集します;)

于 2012-05-11T19:10:53.213 に答える