1. 程式人生 > >XML使用DOM操作

XML使用DOM操作

ber 類型 iphone document trac ktr 編碼 ner ipa

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操作