2016-07-08 2 views
2

У меня есть NumberFormatException, но я не знаю почему?ParserXML NumberFormatException

XML-документ http://www.nbp.pl/kursy/xml/c073z070413.xml

Исключение в потоке "основного" java.lang.NumberFormatException: Для входной строки: "Dolar amerykański" в java.lang.NumberFormatException.forInputString (NumberFormatException.java:65) на java.lang.Integer.parseInt (Integer.java:580) на java.lang.Integer.valueOf (Integer.java:766) на pl.parser.nbp.ParseXML.parsStax (ParseXML.java:83)

public class ParseXML { 


private static Logger logger = Logger.getLogger(ParseXML.class); 


public static void main(String[] args) { 
    ParseXML xml = new ParseXML(); 
    try { 
     List<Currency> currencies = xml.parsStax("xml/nbp.xml"); 
     System.out.println(currencies); 
    } catch (XMLStreamException e) { 
     e.printStackTrace(); 
    } 


} 

public List<Currency> parsStax(final String fileName) throws XMLStreamException { 

    if (fileName == null || fileName.trim().equals("")) { 
     return Collections.emptyList(); 
    } 

    List<Currency> currencyList = new ArrayList(); 
    Currency currency = null; 
    String text = null; 
    boolean inItem = false; 


    XMLInputFactory factory = XMLInputFactory.newFactory(); 
    XMLStreamReader parser = factory 
      .createXMLStreamReader(ClassLoader.getSystemResourceAsStream(fileName)); 


    while (parser.hasNext()) { 
     int event = parser.next(); 

     switch (event) { 
      case XMLStreamConstants.START_ELEMENT: 
       String tagName = parser.getLocalName(); 
       if (tagName.equals("pozycja")) { 
        currency = new Currency(); 
        inItem = true; 
       } 

       break; 

      case XMLStreamConstants.CHARACTERS: 
       if (inItem) { 
        text = parser.getText().trim(); 


       } 
       break; 

      case XMLStreamConstants.END_ELEMENT: 
       switch (parser.getLocalName()) { 
        case "pozycja": 
         currencyList.add(currency); 
         break; 
        case "nazwa_waluty": 
         currency.setName_currency(text); 
         logger.debug(text); 
        case "przelicznik": 
         currency.setConverter(Integer.valueOf(text)); 
         logger.debug("Przelicznki" + text); 
         break; 
        case "kod_waluty": 
         currency.setCode_converter(text); 
         logger.debug(text); 
         break; 
        case "kurs_kupna": 
         currency.setBuying_rate(Double.valueOf(text)); 
         break; 
        case "kurs_sprzedazy": 
         currency.setSelling_rate(Double.valueOf(text)); 
         break; 
       } 
       break; 

      case XMLStreamConstants.START_DOCUMENT: 
       currencyList = new ArrayList(); 
       break; 
     } 
    } 

    return currencyList; 
} 

}

валюты класс

private String name_currency; 
private int converter; 
private String code_converter; 
private double selling_rate; 
private double buying_rate; ... 
+0

переместите операторы отладки перед выполнением значения, и вы увидите ошибку –

+0

@Yogesh_D Да, я вижу, но как я могу это исправить? –

+0

см. Мой ответ ниже. –

ответ