问题
I'm writing a program which gets daily exchange rates from http://www.tcmb.gov.tr/kurlar/today.xml and saves them to the List. Here is my code:
public class ParseTheXml {
private List<CurrencyPojo> currencyList;
public void setCurrencyList(List<CurrencyPojo> currencyList) {
this.currencyList = currencyList;
}
public List<CurrencyPojo> getCurrencyList() throws ParserConfigurationException {
currencyList = new ArrayList<CurrencyPojo>();
try {
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
URL url = new URL("http://www.tcmb.gov.tr/kurlar/today.xml");
Document document = builder.parse(url.openStream());
NodeList nodeList = document.getElementsByTagName("Currency");
for (int i = 0; i < nodeList.getLength(); i++) { // döngü her currency türü için
Element element = (Element) nodeList.item(i);
CurrencyPojo currencyPojoObject = new CurrencyPojo();
currencyPojoObject.setCrossOrder(Integer.parseInt(element.getAttribute("CrossOrder")));
currencyPojoObject.setKod(element.getAttribute("Kod"));
currencyPojoObject.setCurrenyCode(element.getAttribute("CurrencyCode"));
currencyPojoObject.setUnit(Integer.parseInt(element.getElementsByTagName("Unit").item(0).getTextContent()));
currencyPojoObject.setIsim(element.getElementsByTagName("Isim").item(0).getTextContent());
currencyPojoObject.setCurrencyName(element.getElementsByTagName("CurrencyName").item(0).getTextContent());
currencyPojoObject.setForexBuying(Double.parseDouble(element.getElementsByTagName("ForexBuying").item(0).getTextContent()));
currencyPojoObject.setForexSelling(Double.parseDouble(element.getElementsByTagName("ForexSelling").item(0).getTextContent())); // Last 3 codes have Emppty String errors
currencyPojoObject.setBanknoteBuying(Double.parseDouble(element.getElementsByTagName("BanknoteBuying").item(0).getTextContent()));
currencyPojoObject.setBanknoteSelling(Double.parseDouble(element.getElementsByTagName("BanknoteSelling").item(0).getTextContent()));
currencyList.add(currencyPojoObject);
}
} catch (Exception e) {
e.printStackTrace();
}
return currencyList;
}
On the part that getting ForexSelling, BanknoteBuying and Banknote Selling values,I get
java.lang.NumberFormatException: empty String
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1842)
at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
at java.lang.Double.parseDouble(Double.java:538)
at javaxmlparseandshow.ParseTheXml.getCurrencyList(ParseTheXml.java:55)
at javaxmlparseandshow.ParseTheXml.main(ParseTheXml.java:75)
Can someone help me to fix these? Thanks in advance.
回答1:
Alternatively you can set 0 to empty xml strings
private double parseDouble(String val){
if(val== null || val.isEmpty())
return 0.0;
else
return Double.parseDouble(val);
}
EX :
currencyPojoObject.setForexSelling(parseDouble(element.getElementsByTagName("ForexSelling").item(0).getTextContent()));
回答2:
AS I understand from error stacktrace, element.getElementsByTagName("ForexSelling") field has no data. The parser tries to convert empty data to string and throws error. Look at the xml you must see the empty field. As a solution I think you need to first check the data is empty or not:
回答3:
Did you try something on the lines of
String forexStr = element.getElementsByTagName("ForexSelling").item(0).getTextContent();
if( /* forexStr conforms to your criteria like, for example: !forexStr.equals("")*/){
currencyPojoObject.setForexSelling(Double.parseDouble(forexStr);
}
?
来源:https://stackoverflow.com/questions/51043805/java-lang-numberformatexception-error-empty-string-exchange-rate-application