2013-11-22 15 views
0

我打算在java對象的較大xml文件中創建具有相同標記的xml文件。即我需要每次運行一個循環時追加xml文件。 我已經將xml字段名稱和值作爲鍵/值對存儲在HashMap結構中。使用java創建包含存儲在hashmap中的多個xml內容的xml文件

預期:單個大型xml文件中的多個xml內容 實際:生成文件但沒有寫入任何標記/值。只是正在打印整個文件的開始和結束標記

代碼:

try { 

     DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); 

     // root elements 
     Document doc = docBuilder.newDocument(); 
     Element rootElement = doc.createElement("add"); 
     doc.appendChild(rootElement); 

     // document elements 
     Element document = doc.createElement("doc"); 
     rootElement.appendChild(document);  

     Iterator<Entry<String, String>> itr1 = hMap.entrySet().iterator(); 
     System.out.println("-----------------Page start---------------------"); 
     while (itr1.hasNext()) { 
      Map.Entry pairs = (Map.Entry)itr1.next(); 
      System.out.println(pairs.getKey() + "=== " + pairs.getValue()); 
      //itr1.remove(); // avoids a ConcurrentModificationException 
      //String s = pairs.getKey().toString(); 
      Element field = doc.createElement("field"); 
      field.appendChild(doc.createTextNode(pairs.getValue().toString())); 
      field.setAttribute("name", pairs.getKey().toString()); 
      document.appendChild(field); 

     } 

     System.out.println("-------------------Page stop------------------------"); 

     // write the content into xml file 
     TransformerFactory transformerFactory = TransformerFactory.newInstance(); 
     Transformer transformer = transformerFactory.newTransformer(); 
     DOMSource source = new DOMSource(doc); 
     StreamResult result = new StreamResult(new File("D:\\Infoboxinxml.xml")); 

     // Output to console for testing 
     //StreamResult result = new StreamResult(System.out); 

     transformer.transform(source, result); 

     System.out.println("File saved!"); 

     } catch (ParserConfigurationException pce) { 
     pce.printStackTrace(); 
     } catch (TransformerException tfe) { 
     tfe.printStackTrace(); 
     } 
    } 
+1

你知道一個有效的xml文檔必須有一個根節點嗎? – Taylor

回答

0

這將是最容易使用的現代DOM解析器如JDOM

Document document = new Document(); 
Element root = new Element("add"); 
Element doc = new Element("doc"); 
document.addContent(root); 
root.addContent(doc); 

Map<String, String> map = new LinkedHashMap<>(); 
map.put("key1", "value1"); 
map.put("key2", "value2"); 
map.put("key3", "value3"); 

for (Map.Entry<String, String> pair : map.entrySet()) { 
    doc.addContent(
      new Element("field") 
      .setAttribute("name", pair.getKey()) 
      .setText(pair.getValue()) 
    ); 
} 
System.out.println(new XMLOutputter(Format.getPrettyFormat()).outputString(document)); 
相關問題