2012-05-11 19 views
0

私はここ数日、サックスで遊んでいましたが、私はこの問題に対処できませんでした。Java xmlは特定の結果を解析しています:

は、私は次の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つのブール値が設定された後、私は大丈夫だろうと私のアイデアだった...しかし、それは文字列に1つのqNameしか持たないため、それがうまくいかないと私に打たれました... Halp?

答えて

0

それは私がサックスで働いていたので、しばらくしているが、私はみます: あなたが好きあなたのハンドラのフィールドに追加することができます。

だから、
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 
     } 

    } 

} 

ちなみに、compareToの代わりにその代わりに使用する方が良いです。要素をソートしている場合にのみcompareToを使用してください)

EDIT:オブジェクトを考え、私のようにフィールドの代わりにクラスを使用します。 PowerSystemオブジェクトを使用してxmlからデータを収集する)

関連する問題