Мы в нашем учебнике рассмотрели, как выбирать, работать и манипулировать с XML-данными. Для завершения цикла вы должны также уметь выводить XML.
В случае этого учебника целевым выводом является файл, в котором просто перечисляются все заказы по мере того, как они поступают или отвергаются на основе кредита покупателя и customerid.
<?xml version="1.0" encoding="UTF-8"?> <processedOrders> <order> <status>PROCESSED</status> <customerid>2341</customerid> <amount>874.00</amount> </order> <order> <status>REJECTED</status> <customerid>251222</customerid> <amount>200.00</amount> </order> </processedOrders>
Сначала приложение создает объект Document для вывода. Для удобства тот же самый DocumentBuilder, который создавал исходный Document, может создавать и новый.
... public static void main (String args[]) { File docFile = new File("orders.xml"); Document doc = null; Document newdoc = null;
try { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); doc = db.parse(docFile); newdoc = db.newDocument();
} catch (Exception e) { System.out.print("Problem parsing the file: "+e.getMessage()); } ... thisOrder.insertBefore(totalElement, thisOrder.getFirstChild()); } Element newRoot = newdoc.createElement("processedOrders"); NodeList processOrders = doc.getElementsByTagName("order"); for (int orderNum = 0; orderNum < processOrders.getLength(); orderNum++) { Element thisOrder = (Element)processOrders.item(orderNum); Element customerid = (Element)thisOrder.getElementsByTagName("customerid") .item(0); String limit = customerid.getAttributeNode("limit").getNodeValue(); String total = thisOrder.getElementsByTagName("total").item(0) .getFirstChild().getNodeValue(); double limitDbl = new Double(limit).doubleValue(); double totalDbl = new Double(total).doubleValue(); Element newOrder = newdoc.createElement("order"); Element newStatus = newdoc.createElement("status"); if (totalDbl > limitDbl) { newStatus.appendChild(newdoc.createTextNode("REJECTED")); } else { newStatus.appendChild(newdoc.createTextNode("PROCESSED")); } Element newCustomer = newdoc.createElement("customerid"); String oldCustomer = customerid.getFirstChild().getNodeValue(); newCustomer.appendChild(newdoc.createTextNode(oldCustomer)); Element newTotal = newdoc.createElement("total"); newTotal.appendChild(newdoc.createTextNode(total)); newOrder.appendChild(newStatus); newOrder.appendChild(newCustomer); newOrder.appendChild(newTotal); newRoot.appendChild(newOrder); } newdoc.appendChild(newRoot); System.out.print(newRoot.toString());
