2012-05-11 42 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個布爾值分別設置我沒問題......但隨後它讓我感到它不會那樣工作,因爲在字符串中只有一個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;)

編輯:在對象中思考,更好地使用類,而不是象我那樣的字段。使用PowerSystem對象從xml收集數據;)