XML文件(1)--使用DOM示例

  •     其餘依賴字段/方法
   
   
   
   
// 書籍列表 private List<Book> bookList = new LinkedList<Book>(); /** * 根據xml文件,獲得書籍列表 * * @param file * @return */ public List<Book> getBookList(String file) { parseXML(file); return bookList; }
  • 獲取DocumentBuilder(文件解析器)
   
   
   
   
/** * 獲取DocumentBuilder對象 *@return */ private DocumentBuilder getDocumentBuilder() { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = null; try { builder = factory.newDocumentBuilder(); } catch (ParserConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } return builder; }

  • 解析XML文件
   
   
   
   
/** * 讀取XML,並將book對象存入書籍列表 * * @param file */ private void parseXML(String file) { // 1.臨時書籍變量 Book book; try { // 2.獲取DocumentBuilder對象 DocumentBuilder documentBuilder = getDocumentBuilder(); // 3.加載XML文件到當前項目下,獲取Document‘文檔’對象 Document document = documentBuilder.parse(file); // 4.獲取節點名稱是book的集合 NodeList books = document.getElementsByTagName("book"); // 5.遍歷book節點集合 for (int i = 0; i < books.getLength(); i++) { // 重置book變量 book = new Book(); // 5.1聲明book節點變量 Node bookNode = books.item(i); // 5.2獲取book節點的屬性集合 NamedNodeMap nodeMap = bookNode.getAttributes(); // 5.3遍歷屬性集合,判斷併爲book對象的屬性賦值 for (int j = 0; j < nodeMap.getLength(); j++) { // 5.4聲明book的屬性 Node attrNode = nodeMap.item(j); // 5.5若是屬性Name爲id if (attrNode.getNodeName().equals("id")) { book.setId(Integer.valueOf(attrNode.getNodeValue())); } } // 5.6獲取book節點的子節點 NodeList childList = bookNode.getChildNodes(); // 5.7遍歷子節點 for (int j = 0; j < childList.getLength(); j++) { // 5.8 聲明book子節點 Node child = childList.item(j); // 判斷是不是節點。NodeType有三種: // Element(節點):1,Attribute(屬性):2,#Text(文本):3。 if (Node.ELEMENT_NODE == child.getNodeType()) { // 5.9使用switch case判斷,併爲book對象屬性賦值 switch (child.getNodeName()) { case "title": book.setTitle(child.getTextContent()); break; case "author": book.setAuthor(child.getTextContent()); break; case "price": book.setPrice(Double.valueOf(child.getTextContent())); break; case "year": book.setYear(child.getTextContent()); break; case "language": book.setLanguage(child.getTextContent()); break; default: System.out.println("未知屬性!"); } } } // 6 將book對象放入集合 bookList.add(book); } } catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }

  • 生成XML文件
    
    
    
    
/** * 生成XML文件,寫入book列表 * * @param file */ private void createXML(List<Book> bookList, String file, String encoding) { DocumentBuilder builder = getDocumentBuilder(); //建立document文件 Document document = builder.newDocument(); // 在document中,建立根節點 Element eBookstore = document.createElement("bookstore"); for (Book book : bookList) { // 建立book節點 Element eBook = document.createElement("book"); // 爲book節點添加id屬性 eBook.setAttribute("id", String.valueOf(book.getId())); // 建立book的子節點 Element eTitle = document.createElement("title"); // 建立CDATA元素 CDATASection titleByCDATA = document.createCDATASection(book.getTitle()); // 將CDATA元素加入title eTitle.appendChild(titleByCDATA); eTitle.setTextContent(book.getTitle()); Element eAuthor = document.createElement("author"); eAuthor.setTextContent(book.getAuthor()); Element eYear = document.createElement("year"); eYear.setTextContent(book.getYear()); Element ePrice = document.createElement("price"); ePrice.setTextContent(String.valueOf(book.getPrice())); Element eLanguage = document.createElement("language"); eLanguage.setTextContent(book.getLanguage()); // 將子節點添加到book中 eBook.appendChild(eTitle); eBook.appendChild(eAuthor); eBook.appendChild(eYear); eBook.appendChild(ePrice); eBook.appendChild(eLanguage); // 將book節點添加到bookstore根節點中 eBookstore.appendChild(eBook); } // 將bookstore節點添加到document中,目前文件只存在與內存中 document.appendChild(eBookstore); // 建立TransformerFactory 對象 Transformer former = getTransformer(encoding); try { // 建立輸出流 OutputStream output = new FileOutputStream(file); // 輸出XML文件到硬盤 former.transform(new DOMSource(document), new StreamResult(output)); } catch (TransformerConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (TransformerException e) { // TODO Auto-generated catch block e.printStackTrace(); } }

  • 保存Tranformer對象,用於保存XML文件,設置自動換行和編碼
    
    
    
    
/** * 獲取Tranformer對象 * * @param encoding * 指定編碼 * @return Tranformer */ private Transformer getTransformer(String encoding) { // 建立TransformerFactory 對象 TransformerFactory factory = TransformerFactory.newInstance(); Transformer former = null; try { former = factory.newTransformer(); // 換行 former.setOutputProperty(OutputKeys.INDENT, "yes"); // 指定編碼 former.setOutputProperty(OutputKeys.ENCODING, encoding); } catch (TransformerConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } return former; }
相關文章
相關標籤/搜索