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

來源:互聯網
上載者:User

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.transform

javax.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的:




2、Dom 建立 XML

Dom,藉助 javax.xml.parsers.DocumentBuilder,可以建立 org.w3c.dom.Document 對象。

使用來自 DocumentBuilderFactory 的 DocumentBuilder 對象在 Android 裝置上建立與解析 XML 文檔。您將使用 XML pull 解析器的擴充來解析 XML 文檔。

Code

/** Dom方式,建立 XML */<br />public String domCreateXML() {<br />String xmlWriter = null;</p><p>Person []persons = new Person[3];// 建立節點Person對象<br />persons[0] = new Person(1, "sunboy_2050", "http://blog.csdn.net/sunboy_2050");<br />persons[1] = new Person(2, "baidu", "http://www.baidu.com");<br />persons[2] = new Person(3, "google", "http://www.google.com");</p><p>try {<br />DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();<br />DocumentBuilder builder = factory.newDocumentBuilder();<br />Document doc = builder.newDocument();</p><p>Element eleRoot = doc.createElement("root");<br />eleRoot.setAttribute("author", "homer");<br />eleRoot.setAttribute("date", "2012-04-26");<br />doc.appendChild(eleRoot);</p><p>int personsLen = persons.length;<br />for(int i=0; i<personsLen; i++) {<br />Element elePerson = doc.createElement("person");<br />eleRoot.appendChild(elePerson);</p><p>Element eleId = doc.createElement("id");<br />Node nodeId = doc.createTextNode(persons[i].getId() + "");<br />eleId.appendChild(nodeId);<br />elePerson.appendChild(eleId);</p><p>Element eleName = doc.createElement("name");<br />Node nodeName = doc.createTextNode(persons[i].getName());<br />eleName.appendChild(nodeName);<br />elePerson.appendChild(eleName);</p><p>Element eleBlog = doc.createElement("blog");<br />Node nodeBlog = doc.createTextNode(persons[i].getBlog());<br />eleBlog.appendChild(nodeBlog);<br />elePerson.appendChild(eleBlog);<br />}</p><p>Properties properties = new Properties();<br />properties.setProperty(OutputKeys.INDENT, "yes");<br />properties.setProperty(OutputKeys.MEDIA_TYPE, "xml");<br />properties.setProperty(OutputKeys.VERSION, "1.0");<br />properties.setProperty(OutputKeys.ENCODING, "utf-8");<br />properties.setProperty(OutputKeys.METHOD, "xml");<br />properties.setProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");</p><p>TransformerFactory transformerFactory = TransformerFactory.newInstance();<br />Transformer transformer = transformerFactory.newTransformer();<br />transformer.setOutputProperties(properties);</p><p>DOMSource domSource = new DOMSource(doc.getDocumentElement());<br />OutputStream output = new ByteArrayOutputStream();<br />StreamResult result = new StreamResult(output);<br />transformer.transform(domSource, result);</p><p>xmlWriter = output.toString();</p><p>} catch (ParserConfigurationException e) {// factory.newDocumentBuilder<br />e.printStackTrace();<br />} catch (DOMException e) {// doc.createElement<br />e.printStackTrace();<br />} catch (TransformerFactoryConfigurationError e) {// TransformerFactory.newInstance<br />e.printStackTrace();<br />} catch (TransformerConfigurationException e) {// transformerFactory.newTransformer<br />e.printStackTrace();<br />} catch (TransformerException e) {// transformer.transform<br />e.printStackTrace();<br />} catch (Exception e) {<br />e.printStackTrace();<br />}</p><p>savedXML(fileName, xmlWriter.toString());</p><p>return xmlWriter.toString();<br />}

運行結果:


3、Dom 解析 XML

Dom方式,解析XML是建立XML的逆過程,主要用到了builder.parse(is)進行解析,然後通過Tag、NodeList、Element、childNotes等得到Element和Node屬性或值。

Code

/** Dom方式,解析 XML */<br />public String domResolveXML() {<br />StringWriter xmlWriter = new StringWriter();</p><p>InputStream is= readXML(fileName);<br />try {<br />DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();<br />DocumentBuilder builder = factory.newDocumentBuilder();<br />Document doc = builder.parse(is);</p><p>doc.getDocumentElement().normalize();<br />NodeList nlRoot = doc.getElementsByTagName("root");<br />Element eleRoot = (Element)nlRoot.item(0);<br />String attrAuthor = eleRoot.getAttribute("author");<br />String attrDate = eleRoot.getAttribute("date");<br />xmlWriter.append("root").append("\t\t");<br />xmlWriter.append(attrAuthor).append("\t");<br />xmlWriter.append(attrDate).append("\n");</p><p>NodeList nlPerson = eleRoot.getElementsByTagName("person");<br />int personsLen = nlPerson.getLength();<br />Person []persons = new Person[personsLen];<br />for(int i=0; i<personsLen; i++) {<br />Element elePerson = (Element) nlPerson.item(i);// person節點<br />Person person = new Person();// 建立Person對象</p><p>NodeList nlId = elePerson.getElementsByTagName("id");<br />Element eleId = (Element)nlId.item(0);<br />String id = eleId.getChildNodes().item(0).getNodeValue();<br />person.setId(Integer.parseInt(id));</p><p>NodeList nlName = elePerson.getElementsByTagName("name");<br />Element eleName = (Element)nlName.item(0);<br />String name = eleName.getChildNodes().item(0).getNodeValue();<br />person.setName(name);</p><p>NodeList nlBlog = elePerson.getElementsByTagName("blog");<br />Element eleBlog = (Element)nlBlog.item(0);<br />String blog = eleBlog.getChildNodes().item(0).getNodeValue();<br />person.setBlog(blog);</p><p>xmlWriter.append(person.toString()).append("\n");<br />persons[i] = person;<br />}</p><p>} catch (ParserConfigurationException e) {// factory.newDocumentBuilder<br />e.printStackTrace();<br />} catch (SAXException e) {// builder.parse<br />e.printStackTrace();<br />} catch (IOException e) {// builder.parse<br />e.printStackTrace();<br />} catch (Exception e) {<br />e.printStackTrace();<br />}</p><p>return xmlWriter.toString();<br />}

運行結果:

4、Person類

Person類,是建立xml的單位執行個體,基於Java物件導向定義的一個類

public class Person {<br />private int id;<br />private String name;<br />private String blog;</p><p>public Person() {<br />this.id = -1;<br />this.name = "";<br />this.blog = "";<br />}</p><p>public Person(int id, String name, String blog) {<br />this.id = id;<br />this.name = name;<br />this.blog = blog;<br />}</p><p>public Person(Person person) {<br />this.id = person.id;<br />this.name = person.name;<br />this.blog = person.blog;<br />}</p><p>public Person getPerson(){<br />return this;<br />}</p><p>public void setId(int id) {<br />this.id = id;<br />}</p><p>public int getId(){<br />return this.id;<br />}</p><p>public void setName(String name) {<br />this.name = name;<br />}</p><p>public String getName() {<br />return this.name;<br />}</p><p>public void setBlog(String blog) {<br />this.blog = blog;<br />}</p><p>public String getBlog() {<br />return this.blog;<br />}</p><p>public String toString() {<br />return "Person \nid = " + id + "\nname = " + name + "\nblog = " + blog + "\n";<br />}<br />}

代碼下載

參考推薦:

org.w3c.dom

javax.xml.parsers

javax.xml.transform

dom建立xml

java dom建立xml

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.