2015-04-16 3 views
1

Мои xml должны бытьКак избежать вложенных операторов if в java?

<?xml version="1.0" encoding="UTF-8"?> 
<Events> 
    <sunday><Event><ID>123</ID><Desc>abc</Desc></Event><Event><ID>124</ID><Desc>ade</Desc></Event></sunday> 
    <monday><Event><ID>125</ID><Desc>ades</Desc></Event></monday> 
    <tuesday><Event><ID>126</ID><Desc>adde</Desc></Event><Event><ID>127</ID><Desc>aade</Desc></Event></tuesday> 
    <wednesday><Event><ID>128</ID><Desc>afde</Desc></Event></wednesday> 
    <thursday></thursday> 
    <friday></friday> 
    <saturday></saturday> 
</Events> 

Я построения xml из resultset, используя, если еще, если заявление и оно работает нормально.

Это код Java я использую для построения выше xml

String sunTag = "", monTag = "", tueTag = "", wedTag = "", thuTag = "", friTag = "", satTag = ""; 

    while (resultSet.next()) { 
     if("sunday".equalsIgnoreCase(resultSet.getString("WeekName"))) {     
      sunTag = sunTag + "<Event>"; 
      sunTag = sunTag + "<ID>" + resultSet.getString("EventID") + "</ID>"; 
      sunTag = sunTag + "<Desc>" + resultSet.getString("EventDesc") + "</D>"; 
      sunTag = sunTag + "</Event>"; 

     } else if("monday".equalsIgnoreCase(resultSet.getString("WeekName"))) {     
      monTag = monTag + "<Event>"; 
      monTag = monTag + "<ID>" + resultSet.getString("EventID") + "</ID>"; 
      monTag = monTag + "<Desc>" + resultSet.getString("EventDesc") + "</D>"; 
      monTag = monTag + "</Event>"; 

     } else if("tuesday".equalsIgnoreCase(resultSet.getString("WeekName"))) {     
      tueTag = tueTag + "<Event>"; 
      tueTag = tueTag + "<ID>" + resultSet.getString("EventID") + "</ID>"; 
      tueTag = tueTag + "<Desc>" + resultSet.getString("EventDesc") + "</D>"; 
      tueTag = tueTag + "</Event>"; 

     } else if("wednesday".equalsIgnoreCase(resultSet.getString("WeekName"))) {     
      wedTag = wedTag + "<Event>"; 
      wedTag = wedTag + "<ID>" + resultSet.getString("EventID") + "</ID>"; 
      wedTag = wedTag + "<D>" + resultSet.getString("EventDesc") + "</D>"; 
      wedTag = wedTag + "</Event>"; 

     } else if("thursday".equalsIgnoreCase(resultSet.getString("WeekName"))) {     
      thuTag = thuTag + "<Event>"; 
      thuTag = thuTag + "<ID>" + resultSet.getString("EventID") + "</ID>"; 
      thuTag = thuTag + "<Desc>" + resultSet.getString("EventDesc") + "</D>"; 
      thuTag = thuTag + "</Event>"; 

     } else if("friday".equalsIgnoreCase(resultSet.getString("WeekName"))) {     
      friTag = friTag + "<Event>"; 
      friTag = friTag + "<ID>" + resultSet.getString("EventID") + "</ID>"; 
      friTag = friTag + "<Desc>" + resultSet.getString("EventDesc") + "</D>"; 
      friTag = friTag + "</Event>"; 

     } else if("saturday".equalsIgnoreCase(resultSet.getString("WeekName"))) {     
      satTag = satTag + "<Event>"; 
      satTag = satTag + "<ID>" + resultSet.getString("EventID") + "</ID>"; 
      satTag = satTag + "<Desc>" + resultSet.getString("EventDesc") + "</D>"; 
      satTag = satTag + "</Event>"; 

     }      
    }        
    result = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" 
    + <Events>" 
     + "<sunday>" + sunTag + "</sunday>" 
     + "<monday>" + monTag + "</monday>" 
     + "<tuesday>" + tueTag + "</tuesday>" 
     + "<wednesday>" + wedTag + "</wednesday>" 
     + "<thursday>" + thuTag + "</thursday>" 
     + "<friday>" + friTag + "</friday>" 
     + "<saturday>" + satTag + "</saturday>" 
    + "</Events>"; 

Есть ли другой способ достичь этого без использования вложенных если заявления?

ответ

2

Если я правильно понимаю, вы можете конденсировать его почти полностью с помощью Map.

Map<String, String> map = 
    new TreeMap<>(String.CASE_INSENSITIVE_ORDER); 

while(resultSet.next()) { 
    String weekName = resultSet.getString("WeekName"); 
    String tag = map.get(weekName); 
    if(tag == null) { 
     tag = ""; 
    } 

    tag = tag + "<Event>"; 
    tag = tag + "<ID>" + resultSet.getString("EventID") + "</ID>"; 
    tag = tag + "<Desc>" + resultSet.getString("EventDesc") + "</D>"; 
    tag = tag + "</Event>"; 

    map.put(weekName, tag); 
} 

String sunTag = map.get("sunday"); 
String monTag = map.get("monday"); 
String tueTag = map.get("tuesday"); 
String wedTag = map.get("wednesday"); 
String thuTag = map.get("thursday"); 
String friTag = map.get("friday"); 
String satTag = map.get("saturday"); 

Смотрите также The Map Interface.

+0

есть вероятность, что thuTag получит null String thuTag = map.get ("thursday") == null? "": map.get ("thursday"); Я прав? – Martin

+0

@Martin Да, вы можете решить это, либо положив пустую строку на карту в начале для каждого дня, например. 'map.put (" sunday "," ");' или проверка в конце. – Radiodef

+0

Еще лучше, избегайте конкатенации строк с помощью StringBuilder. Даже лучше, не стройте XML как строку: используйте библиотеку для записи XML, такую ​​как Stax. Это немедленно предотвратило бы ошибку, присутствующую в этих примерах, где написаны несоответствующие начальные и конечные теги, и где не предпринимаются попытки избежать содержимого текстовых узлов. –

1

Есть ли другой способ добиться этого без использования вложенных, если заявлений?

Да, используйте switch заявление. Перед использованием switch убедитесь, что приложение использует Jdk 1.7.

+0

Спасибо Масуд. Но я использую jdk 1.6 – Martin

Смежные вопросы