XML使用DOM操作
DOM 文檔對象模型
基於XML文檔樹結構解析
適用於多次訪問的xml文檔
特點:比較消耗資源
1).Document對象
NodeList getElementsByTagName(String name):指定節點名稱的元素集合,返回NodeList對象
Element getDocumentElement():
2).NodeList對象
指包含了一個或者多個節點(Node)的列表.
getLength():返回列表的長度.
item(int index):返回指定位置的Node對象
3).Node對象
getChildNodes():包含此節點的所有子節點的NodeList
getFirstChild():如果節點存在子節點,則返回第一個子節點
getLastChild():如果節點存在子節點,則返回最後一個子節點
getNextSibling():返回在DOM樹中這個節點的下一個兄弟節點
getPreviousSibling():返回在DOM樹中這個節點的上一個兄弟節點
getNodeName():返回節點的名稱
getNodeValue():返回節點的值
getNodeType():返回節點的類型
4).Element對象
Node的子對象
getAttribute(String attributename):返回標簽中給定屬性名稱的屬性的值
getElementsByTagName(String name):返回具有給定標記名稱的所有後代Elements的NodeList
if (typeNode.getNodeType()==Node.ELEMENT_NODE):判斷是否為元素節點
//添加子節點 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db; try { db = dbf.newDocumentBuilder(); Document document = db.parse("src/com/xml/PhoneInfo.xml");//創建Brand節點 Element element = document.createElement("Brand"); element.setAttribute("name", "MOTO"); //創建Type節點 Element typElement = document.createElement("Type"); typElement.setAttribute("name", "摩托羅拉"); //創建Item節點 Element itemeElement = document.createElement("Item");//添加父子關系 typElement.appendChild(itemeElement); element.appendChild(typElement); Element phoneElement = (Element)document.getElementsByTagName("PhoneInfo").item(0); phoneElement.appendChild(element); //保存xml文件 TransformerFactory tff = TransformerFactory.newInstance(); try { Transformer transformer = tff.newTransformer(); DOMSource domSource = new DOMSource(document); //設置編碼類型 transformer.setOutputProperty(OutputKeys.ENCODING, "utf-8"); StreamResult result = new StreamResult(new FileOutputStream("src/com/xml/PhoneInfo.xml")); //把DOM樹轉換成XML文件 transformer.transform(domSource, result); } catch (TransformerConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (TransformerException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (ParserConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }
//修改子節點 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db; try { db = dbf.newDocumentBuilder(); Document document = db.parse("src/com/xml/PhoneInfo.xml"); NodeList nodeList = document.getElementsByTagName("Type"); for (int i=0;i<nodeList.getLength();i++){ Element element = (Element)nodeList.item(i); String brandName = element.getAttribute("name"); System.out.println("修改前:"+brandName); if ("iphone4".equals(brandName)){ element.setAttribute("name", "iPad"); } } //保存xml文檔 TransformerFactory tff = TransformerFactory.newInstance(); try { Transformer transformer = tff.newTransformer(); DOMSource domSource = new DOMSource(document); //設置編碼類型 transformer.setOutputProperty(OutputKeys.ENCODING, "utf-8"); StreamResult result = new StreamResult(new FileOutputStream("src/com/xml/PhoneInfo.xml")); //把DOM樹轉換成XML文件 transformer.transform(domSource, result); } catch (TransformerConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (TransformerException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (ParserConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }
//刪除節點 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); try { DocumentBuilder db = dbf.newDocumentBuilder(); Document document = db.parse("src/com/xml/PhoneInfo.xml"); NodeList list = document.getElementsByTagName("Brand"); for (int i=0;i<list.getLength();i++){ Element element = (Element)list.item(i); String brandName = element.getAttribute("name"); if ("MOHAHA".equals(brandName)){ element.getParentNode().removeChild(element); } } //保存文件 TransformerFactory tff = TransformerFactory.newInstance(); try { Transformer transformer = tff.newTransformer(); DOMSource domSource = new DOMSource(document); //設置編碼類型 transformer.setOutputProperty(OutputKeys.ENCODING, "utf-8"); StreamResult result = new StreamResult(new FileOutputStream("src/com/xml/PhoneInfo.xml")); //把DOM樹轉換成XML文件 transformer.transform(domSource, result); } catch (TransformerConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (TransformerException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (ParserConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }
設置縮進:
①
TransformerFactory tff = TransformerFactory.newInstance();
tff.setAttribute("indent-number", 4);
②
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
StreamResult result = new StreamResult(new OutputStreamWriter(new FileOutputStream("src/com/xml/Phone.xml"),"utf-8"));
XML使用DOM操作