woff 發表於 2016-2-4 15:00:07

Android 創建與解析XML(二)—— Dom方式

1. Dom概述Dom方式創建XML,應用了標準xml構造器javax.xml.parsers.DocumentBuilder來創建XML文檔,需要導入以下內容javax.xml.parsers
javax.xml.parsers.DocumentBuilder
javax.xml.parsers.DocumentBuilderFactory
javax.xml.parsers.ParserConfigurationException;
javax.xml.transformjavax.xml.transform.TransformerFactory
javax.xml.transform.Transformer
javax.xml.transform.dom.DOMSource
javax.xml.transform.stream.StreamResult
javax.xml.transform.OutputKeys;
javax.xml.transform.TransformerFactoryConfigurationError;
javax.xml.transform.TransformerConfigurationException;
javax.xml.transform.TransformerException;
org.w3c.dom org.w3c.dom.Document;
org.w3c.dom.Element;
org.w3c.dom.Node;
org.w3c.dom.DOMException;
org.w3c.dom.NodeList;
org.xml.sax.SAXException;sdk源碼查看路徑(google code)
創建和解析xml的效果圖:http://my.csdn.net/uploads/201204/29/1335707958_1276.png


2、Dom 創建XMLDom,借助javax.xml.parsers.DocumentBuilder,可以創建org.w3c.dom.Document 對象。使用來自DocumentBuilderFactory 的DocumentBuilder 對像在Android 設備上創建與解析XML 文檔。您將使用XML pull 解析器的擴展來解析XML 文檔。/** Dom方式,創建 XML */
      public String domCreateXML() {
                String xmlWriter = null;
               
                Person []persons = new Person;               //創建節點Person對象
                persons = new Person(1, "sunboy_2050", "http://blog.csdn.net/sunboy_2050");
                persons = new Person(2, "baidu", "http://www.baidu.com");
                persons = new Person(3, "google", "http://www.google.com");
               
                try {
                        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
                        DocumentBuilder builder = factory.newDocumentBuilder();
                        Document doc = builder.newDocument();
                        
                        Element eleRoot = doc.createElement("root");
                        eleRoot.setAttribute("author", "homer");
                        eleRoot.setAttribute("date", "2012-04-26");
                        doc.appendChild(eleRoot);
                        
                        int personsLen = persons.length;
                        for(int i=0; i<personsLen; i++) {
                              Element elePerson = doc.createElement("person");
                              eleRoot.appendChild(elePerson);
                              
                              Element eleId = doc.createElement("id");
                              Node nodeId = doc.createTextNode(persons.getId() + "");
                              eleId.appendChild(nodeId);
                              elePerson.appendChild(eleId);

                              Element eleName = doc.createElement("name");
                              Node nodeName = doc.createTextNode(persons.getName());
                              eleName.appendChild(nodeName);
                              elePerson.appendChild(eleName);

                              Element eleBlog = doc.createElement("blog");
                              Node nodeBlog = doc.createTextNode(persons.getBlog());
                              eleBlog.appendChild(nodeBlog);
                              elePerson.appendChild(eleBlog);
                        }
                        
                        
                        Properties properties = new Properties();
                        properties.setProperty(OutputKeys.INDENT, "yes");
                        properties.setProperty(OutputKeys.MEDIA_TYPE, "xml");
                        properties.setProperty(OutputKeys.VERSION, "1.0");
                        properties.setProperty(OutputKeys.ENCODING, "utf-8");
                        properties.setProperty(OutputKeys.METHOD, "xml");
                        properties.setProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
                        
                        TransformerFactory transformerFactory = TransformerFactory.newInstance();
                        Transformer transformer = transformerFactory.newTransformer();
                        transformer.setOutputProperties(properties);
                        
                        DOMSource domSource = new DOMSource(doc.getDocumentElement());
                        OutputStream output = new ByteArrayOutputStream();
                        StreamResult result = new StreamResult(output);
                        transformer.transform(domSource, result);
                        
                        xmlWriter = output.toString();
                        
                } catch (ParserConfigurationException e) {                // factory.newDocumentBuilder
                        e.printStackTrace();
                } catch (DOMException e) {                                                // doc.createElement
                        e.printStackTrace();
                } catch (TransformerFactoryConfigurationError e) {                // TransformerFactory.newInstance
                        e.printStackTrace();
                } catch (TransformerConfigurationException e) {                // transformerFactory.newTransformer
                        e.printStackTrace();
                } catch (TransformerException e) {                              // transformer.transform
                        e.printStackTrace();
                } catch (Exception e) {
                        e.printStackTrace();
                }
               
                savedXML(fileName, xmlWriter.toString());
               
                return xmlWriter.toString();
      }運行結果:


3、Dom 解析XML
Dom方式,解析XML是創建XML的逆過程,主要用到了builder.parse(is)進行解析,然後通過Tag、NodeList、Element、childNotes等得到Element和Node屬性或值。/** Dom方式,解析 XML*/
      public String domResolveXML() {
                StringWriter xmlWriter = new StringWriter();
               
                InputStream is= readXML(fileName);
                try {
                        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
                        DocumentBuilder builder = factory.newDocumentBuilder();
                        Document doc = builder.parse(is);

                        doc.getDocumentElement().normalize();
                        NodeList nlRoot = doc.getElementsByTagName("root");
                        Element eleRoot = (Element)nlRoot.item(0);
                        String attrAuthor = eleRoot.getAttribute("author");
                        String attrDate = eleRoot.getAttribute("date");
                        xmlWriter.append("root").append("\t\t");
                        xmlWriter.append(attrAuthor).append("\t");
                        xmlWriter.append(attrDate).append("\n");
                        
                        NodeList nlPerson = eleRoot.getElementsByTagName("person");
                        int personsLen = nlPerson.getLength();
                        Person []persons = new Person;
                        for(int i=0; i<personsLen; i++) {
                              Element elePerson = (Element) nlPerson.item(i);                // person節點
                              Person person = new Person();                                             //創建Person對象
                              
                              NodeList nlId = elePerson.getElementsByTagName("id");
                              Element eleId = (Element)nlId.item(0);
                              String id = eleId.getChildNodes().item(0).getNodeValue();
                              person.setId(Integer.parseInt(id));
                              
                              NodeList nlName = elePerson.getElementsByTagName("name");
                              Element eleName = (Element)nlName.item(0);
                              String name = eleName.getChildNodes().item(0).getNodeValue();
                              person.setName(name);
                              
                              NodeList nlBlog = elePerson.getElementsByTagName("blog");
                              Element eleBlog = (Element)nlBlog.item(0);
                              String blog = eleBlog.getChildNodes().item(0).getNodeValue();
                              person.setBlog(blog);
                              
                              xmlWriter.append(person.toString()).append("\n");
                              persons = person;
                        }
                        
                } catch (ParserConfigurationException e) {                // factory.newDocumentBuilder
                        e.printStackTrace();
                } catch (SAXException e) {                // builder.parse
                        e.printStackTrace();
                } catch (IOException e) {                // builder.parse
                        e.printStackTrace();
                } catch (Exception e) {
                        e.printStackTrace();
                }
               
                return xmlWriter.toString();
      }
運行結果:


4、Person類Person類,是創建xml的單位實例,基於Java面向對象定義的一個類public class Person {
        private int id;
        private String name;
        private String blog;
       
        public Person() {
                this.id = -1;
                this.name = "";
                this.blog = "";
        }

        public Person(int id, String name, String blog) {
                this.id = id;
                this.name = name;
                this.blog = blog;
        }
       
        public Person(Person person) {
                this.id = person.id;
                this.name = person.name;
                this.blog = person.blog;
        }

        public Person getPerson(){
                return this;
        }
       
        public void setId(int id) {
                this.id = id;
        }
       
        public int getId(){
                return this.id;
        }
       
        public void setName(String name) {
                this.name = name;
        }

        public String getName() {
                return this.name;
        }

        public void setBlog(String blog) {
                this.blog = blog;
        }

        public String getBlog() {
                return this.blog;
        }

        public String toString() {
                return "Person \nid = " + id + "\nname = " + name + "\nblog = " + blog + "\n";
        }
}代碼下載
頁: [1]
查看完整版本: Android 創建與解析XML(二)—— Dom方式