最近我制作了一款无错误的应用。它需要用户从texfields(ID,品牌,型号,类型,价格和inStock)输入并将其写入不同的数据源。我有一个接口,其中包含不同数据源类实现的方法。我还使用工厂选择DAO型。现在出于实践目的,我已经制作了另一个具有完全相同代码的应用程序,唯一的区别是几个不同的数据类型,例如“价格”是一个双倍。我遇到了XML问题。
我输入所有文本字段并按下“添加”按钮,这有点错误消息:
Exception in thread "JavaFX Application Thread" 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 javafx.DAOProduktXMLFile.getProducts(DAOProduktXMLFile.java:137)
at javafx.GUI_Pane$Lyssnare.handle(GUI_Pane.java:167)
我的XML结果是这样的,ID 1之前有,它是我试图添加的ID号2:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<produkter>
<produkt id="1">
<brand>Toyz</brand>
<model>Firetruck</model>
<type>Vehichle</type>
<price>199.0</price>
<inStock>true</inStock>
</produkt>
<produkt id="2">
<brand>false</brand>
<model/>
<type/>
<price/>
<inStock/>
</produkt>
</produkter>
这是add-method:
@Override
public void add(DTOProduct dtoProduct) {
doc = getDOMDocument();
Element root = doc.getDocumentElement();
Element produkt = doc.createElement("produkt");
product.setAttribute("id", String.valueOf(dtoProduct.id));
Element brand = doc.createElement("brand");
brand.setTextContent(dtoProduct.brand);
Element model = doc.createElement("model");
brand.setTextContent(dtoProduct.model);
Element type = doc.createElement("type");
brand.setTextContent(dtoProduct.type);
Element price = doc.createElement("price");
brand.setTextContent(String.valueOf(dtoProduct.price));
Element inStock = doc.createElement("inStock");
brand.setTextContent(String.valueOf(dtoProduct.inStock));
product.appendChild(brand);
product.appendChild(model);
product.appendChild(type);
product.appendChild(price);
product.appendChild(inStock);
root.appendChild(produkt);
writeToXML(doc);
}
获取DOM文档方法:
private Document getDOMDocument() {
try {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
doc = db.parse(new File("products.xml"));
} catch (SAXException ex) {
} catch (IOException ex) {
} catch (ParserConfigurationException ex) {
}
return doc;
}
最后,writeToXML方法:
private void writeToXML(Document doc) {
try {
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty("{http://xml.apache.com/xslt}indent-amount", "2");
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File("products.xml"));
transformer.transform(source, result);
} catch (TransformerException ex) {
Logger.getLogger(DAOProduktXMLFile.class.getName()).log(Level.SEVERE, null, ex);
}
}
我不知道出了什么问题。就像我说的,所有这些代码基本上是从我的其他工作应用程序复制粘贴然后修改以适应我的新数据类型,并且它没有textfile,mysql或excel的问题,但XML只是不起作用!
有什么想法吗?