Java Help with Logic in XML SAX Handler -


i trying set sax handler parse xml following structure:

<hours>   <set name="business">         <mo>               <open>09:00:00</open>               <close>17:00:00</close>         </mo>         <tu>               <open>09:00:00</open>               <close>17:00:00</close>         </tu>         <we>               <open>09:00:00</open>               <close>17:00:00</close>         </we>         <th>               <open>09:00:00</open>               <close>17:00:00</close>         </th>         <fr>               <open>09:00:00</open>               <close>17:00:00</close>         </fr>         <sa/>         <su/>   </set>   <set name="lastcollection">         <mo>               <close>17:00:00</close>         </mo>         <tu>               <close>17:00:00</close>         </tu>         <we>               <close>17:00:00</close>         </we>         <th>               <close>17:00:00</close>         </th>         <fr>               <close>17:00:00</close>         </fr>         <sa/>         <su/>   </set>  </hours> 

i running problems, however. code value of open , close in mo, not in of other days of week. can find flaw in logic? here handler code:

public void startelement(string uri, string localname, string qname,         attributes attributes) throws saxexception {      if (localname.equalsignorecase("set")             && attributes.getvalue("name").equalsignorecase(                     "business")) {         inbusiness = true;     } else if (localname.equalsignorecase("set")             && attributes.getvalue("name").equalsignorecase(                     "lastcollection")) {         inlastcollection = true;     } else if (localname.equalsignorecase("mo")) {         inmonday = true;     } else if (localname.equalsignorecase("tu")) {         intuesday = true;     } else if (localname.equalsignorecase("we")) {         inwednesday = true;     } else if (localname.equalsignorecase("th")) {         inthursday = true;     } else if (localname.equalsignorecase("fr")) {         infriday = true;     } else if (localname.equalsignorecase("sa")) {         insaturday = true;     } else if (localname.equalsignorecase("su")) {         insunday = true;     } else if (localname.equalsignorecase("open")) {         inopen = true;     } else if (localname.equalsignorecase("close")) {         inclose = true;     }  }  public void characters(char ch[], int start, int length)         throws saxexception {      value = value + new string(ch, start, length).trim();  }  public void endelement(string uri, string name, string qname)         throws saxexception {      if (inbusiness) {          bhours = new businesshours();          if (inmonday) {              if (inopen) {                 bhours.setmondayopen(value);                 inopen = false;             } else if (inclose) {                 bhours.setmondayclose(value);                 inclose = false;             }             inmonday = false;          } else if (intuesday) {             if (inopen) {                 bhours.settuesdayopen(value);                 inopen = false;             } else if (inclose) {                 bhours.settuesdayclose(value);                 inclose = false;             }             intuesday = false;         } else if (inwednesday) {             if (inopen) {                 bhours.setwednesdayopen(value);                 inopen = false;             } else if (inclose) {                 bhours.setwednesdayclose(value);                 inclose = false;             }             inwednesday = false;         } else if (inthursday) {             if (inopen) {                 bhours.setthursdayopen(value);                 inopen = false;             } else if (inclose) {                 bhours.setthursdayclose(value);                 inclose = false;             }             inthursday = false;         } else if (infriday) {             if (inopen) {                 bhours.setfridayopen(value);                 inopen = false;             } else if (inclose) {                 bhours.setfridayclose(value);                 inclose = false;             }             infriday = false;         } else if (insaturday) {             if (inopen) {                 bhours.setsaturdayopen(value);                 inopen = false;             } else if (inclose) {                 bhours.setsaturdayclose(value);                 inclose = false;             }             insaturday = false;         } else if (insunday) {             if (inopen) {                 bhours.setsundayopen(value);                 inopen = false;             } else if (inclose) {                 bhours.setsundayclose(value);                 inclose = false;             }             insunday = false;          }         myloc.setbusinesshours(bhours);         inbusiness = false;     } else if (inlastcollection) {          chours = new lastcollectionhours();          if (inmonday) {              if (inopen) {                 chours.setmondayopen(value);                 inopen = false;             } else if (inclose) {                 chours.setmondayclose(value);                 inclose = false;             }             inmonday = false;          } else if (intuesday) {             if (inopen) {                 chours.settuesdayopen(value);                 inopen = false;             } else if (inclose) {                 chours.settuesdayclose(value);                 inclose = false;             }             intuesday = false;         } else if (inwednesday) {             if (inopen) {                 chours.setwednesdayopen(value);                 inopen = false;             } else if (inclose) {                 chours.setwednesdayclose(value);                 inclose = false;             }             inwednesday = false;         } else if (inthursday) {             if (inopen) {                 chours.setthursdayopen(value);                 inopen = false;             } else if (inclose) {                 chours.setthursdayclose(value);                 inclose = false;             }             inthursday = false;         } else if (infriday) {             if (inopen) {                 chours.setfridayopen(value);                 inopen = false;             } else if (inclose) {                 chours.setfridayclose(value);                 inclose = false;             }             infriday = false;         } else if (insaturday) {             if (inopen) {                 chours.setsaturdayopen(value);                 inopen = false;             } else if (inclose) {                 chours.setsaturdayclose(value);                 inclose = false;             }             insaturday = false;         } else if (insunday) {             if (inopen) {                 chours.setsundayopen(value);                 inopen = false;             } else if (inclose) {                 chours.setsundayclose(value);                 inclose = false;             }             insunday = false;          }         myloc.setlastcollectionhours(chours);         inlastcollection = false;     }  } 

updated code:

public void startelement(string uri, string localname, string qname,         attributes attributes) throws saxexception {      value = new string();      if (localname.equalsignorecase("set")             && attributes.getvalue("name").equalsignorecase("business")) {         currentelement = 1;         bhours = new businesshours();      } else if (localname.equalsignorecase("set")             && attributes.getvalue("name").equalsignorecase(                     "lastcollection")) {         currentelement = 2;         chours = new lastcollectionhours();     } else if (localname.equalsignorecase("mo")) {         day = 1;     } else if (localname.equalsignorecase("tu")) {         day = 2;     } else if (localname.equalsignorecase("we")) {         day = 3;     } else if (localname.equalsignorecase("th")) {         day = 4;     } else if (localname.equalsignorecase("fr")) {         day = 5;     } else if (localname.equalsignorecase("sa")) {         day = 6;     } else if (localname.equalsignorecase("su")) {         day = 7;     } else if (localname.equalsignorecase("open")) {         open = 1;     } else if (localname.equalsignorecase("close")) {         open = 2;     }  }  public void characters(char ch[], int start, int length)         throws saxexception {      value = value + new string(ch, start, length).trim();  } // end method characters  public void endelement(string uri, string name, string qname)         throws saxexception {      if (name.equalsignorecase("set") && currentelement == 1) {         myloc.setbusinesshours(bhours);     } else if (name.equalsignorecase("set") && currentelement == 2) {         myloc.setlastcollectionhours(chours);      }      if (currentelement == 1) {          if (day == 1) {              if (open == 1) {                 bhours.setmondayopen(value);             } else if (open == 2) {                 bhours.setmondayclose(value);             }          } else if (day == 2) {              if (open == 1) {                 bhours.settuesdayopen(value);             } else if (open == 2) {                 bhours.settuesdayclose(value);             }         } else if (day == 3) {              if (open == 1) {                 bhours.setwednesdayopen(value);             } else if (open == 2) {                 bhours.setwednesdayclose(value);             }         } else if (day == 4) {              if (open == 1) {                 bhours.setthursdayopen(value);             } else if (open == 2) {                 bhours.setthursdayclose(value);             }         } else if (day == 5) {              if (open == 1) {                 bhours.setfridayopen(value);             } else if (open == 2) {                 bhours.setfridayclose(value);             }         } else if (day == 6) {              if (open == 1) {                 bhours.setsaturdayopen(value);             } else if (open == 2) {                 bhours.setsaturdayclose(value);             }         } else if (day == 7) {              if (open == 1) {                 bhours.setsundayopen(value);             } else if (open == 2) {                 bhours.setsundayclose(value);             }          }      } else if (currentelement == 2) {          if (day == 1) {              if (open == 1) {                 chours.setmondayopen(value);             } else if (open == 2) {                 chours.setmondayclose(value);             }          } else if (day == 2) {              if (open == 1) {                 chours.settuesdayopen(value);             } else if (open == 2) {                 chours.settuesdayclose(value);             }         } else if (day == 3) {              if (open == 1) {                 chours.setwednesdayopen(value);             } else if (open == 2) {                 chours.setwednesdayclose(value);             }         } else if (day == 4) {              if (open == 1) {                 chours.setthursdayopen(value);             } else if (open == 2) {                 chours.setthursdayclose(value);             }         } else if (day == 5) {              if (open == 1) {                 chours.setfridayopen(value);             } else if (open == 2) {                 chours.setfridayclose(value);             }         } else if (day == 6) {              if (open == 1) {                 chours.setsaturdayopen(value);             } else if (open == 2) {                 chours.setsaturdayclose(value);             }         } else if (day == 7) {              if (open == 1) {                 chours.setsundayopen(value);             } else if (open == 2) {                 chours.setsundayclose(value);             }          }      }  } 

thanks!

on line 116 setting inbusiness = false - set after monday's open/close. next time around fails if(inbusiness) on line 44.

instead of using inbusiness boolean, use int indicator follows:

private int curelement = 0;

public void startelement(string uri, string localname, string qname, attributes attributes) throws saxexception {

if (localname.equalsignorecase("set")         && attributes.getvalue("name").equalsignorecase(                 "business")) {     curelement = 1; } else if (localname.equalsignorecase("set")         && attributes.getvalue("name").equalsignorecase(                 "lastcollection")) {     curelement = 2; } 

......

}

public void endelement(string uri, string name, string qname) throws saxexception {

if (curelement == 1) {      ....     //remove inbusiness= false; } else if (curelement == 2) {     ...     //remove inlastcollection = false; } 

}


Comments

Popular posts from this blog

asp.net - repeatedly call AddImageUrl(url) to assemble pdf document -

java - Android recognize cell phone with keyboard or not? -

iphone - How would you achieve a LED Scrolling effect? -