1. Dom概述
Dom方式创建XML,应用了标准xml构造器 javax.xml.parsers.documentBuilder 来创建 XML 文档,需要导入以下内容
javax.xml.parsersjavax.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;
创建和解析xml的效果图:
2、Dom 创建 XML
Dom,借助 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[3]; // 创建节点Person对象 persons[0] = new Person(1,"sunboy_2050","http://www.jb51.net/"); persons[1] = new Person(2,"baIDu","http://wwwbaIDucom"); persons[2] = new Person(3,"Google","http://wwwGooglecom"); try { documentBuilderFactory factory = documentBuilderFactorynewInstance(); documentBuilder builder = factorynewdocumentBuilder(); document doc = buildernewdocument(); Element eleRoot = doccreateElement("root"); eleRootsetAttribute("author","homer"); eleRootsetAttribute("date","2012-04-26"); docappendChild(eleRoot); int personsLen = personslength; for(int i=0; i<personsLen; i++) { Element elePerson = doccreateElement("person"); eleRootappendChild(elePerson); Element eleID = doccreateElement("ID"); Node nodeID = doccreateTextNode(persons[i]getID() + ""); eleIDappendChild(nodeID); elePersonappendChild(eleID); Element elename = doccreateElement("name"); Node nodename = doccreateTextNode(persons[i]getname()); elenameappendChild(nodename); elePersonappendChild(elename); Element eleBlog = doccreateElement("blog"); Node nodeBlog = doccreateTextNode(persons[i]getBlog()); eleBlogappendChild(nodeBlog); elePersonappendChild(eleBlog); } PropertIEs propertIEs = new PropertIEs(); propertIEssetProperty(OutputKeysINDENT,"yes"); propertIEssetProperty(OutputKeysMEDIA_TYPE,"xml"); propertIEssetProperty(OutputKeysveRSION,"0"); propertIEssetProperty(OutputKeysENCoding,"utf-8"); propertIEssetProperty(OutputKeysMETHOD,"xml"); propertIEssetProperty(OutputKeysOMIT_XML_DECLaraTION,"yes"); transformerFactory transformerFactory = transformerFactorynewInstance(); transformer transformer = transformerFactorynewtransformer(); transformersetoutputPropertIEs(propertIEs); DOMSource domSource = new DOMSource(docgetdocumentElement()); OutputStream output = new ByteArrayOutputStream(); StreamResult result = new StreamResult(output); transformertransform(domSource,result); xmlWriter = outputtoString(); } catch (ParserConfigurationException e) { // factorynewdocumentBuilder eprintstacktrace(); } catch (DOMException e) { // doccreateElement eprintstacktrace(); } catch (transformerFactoryConfigurationError e) { // transformerFactorynewInstance eprintstacktrace(); } catch (transformerConfigurationException e) { // transformerFactorynewtransformer eprintstacktrace(); } catch (transformerException e) { // transformertransform eprintstacktrace(); } catch (Exception e) { eprintstacktrace(); } savedXML(filename,xmlWritertoString()); return xmlWritertoString(); }
运行结果:
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 = documentBuilderFactorynewInstance(); documentBuilder builder = factorynewdocumentBuilder(); document doc = builderparse(is); docgetdocumentElement()normalize(); NodeList nlRoot = docgetElementsByTagname("root"); Element eleRoot = (Element)nlRootitem(0); String attrAuthor = eleRootgetAttribute("author"); String attrDate = eleRootgetAttribute("date"); xmlWriterappend("root")append("\t\t"); xmlWriterappend(attrAuthor)append("\t"); xmlWriterappend(attrDate)append("\n"); NodeList nlPerson = eleRootgetElementsByTagname("person"); int personsLen = nlPersongetLength(); Person []persons = new Person[personsLen]; for(int i=0; i<personsLen; i++) { Element elePerson = (Element) nlPersonitem(i); // person节点 Person person = new Person(); // 创建Person对象 NodeList nlID = elePersongetElementsByTagname("ID"); Element eleID = (Element)nlIDitem(0); String ID = eleIDgetChildNodes()item(0)getNodeValue(); personsetID(IntegerparseInt(ID)); NodeList nlname = elePersongetElementsByTagname("name"); Element elename = (Element)nlnameitem(0); String name = elenamegetChildNodes()item(0)getNodeValue(); personsetname(name); NodeList nlBlog = elePersongetElementsByTagname("blog"); Element eleBlog = (Element)nlBlogitem(0); String blog = eleBloggetChildNodes()item(0)getNodeValue(); personsetBlog(blog); xmlWriterappend(persontoString())append("\n"); persons[i] = person; } } catch (ParserConfigurationException e) { // factorynewdocumentBuilder eprintstacktrace(); } catch (SAXException e) { // builderparse eprintstacktrace(); } catch (IOException e) { // builderparse eprintstacktrace(); } catch (Exception e) { eprintstacktrace(); } return xmlWritertoString(); }
运行结果:
4、Person类
Person类,是创建XML的单位实例,基于Java面向对象定义的一个类
public class Person { private int ID; private String name; private String blog; public Person() { thisID = -1; thisname = ""; thisblog = ""; } public Person(int ID,String name,String blog) { thisID = ID; thisname = name; thisblog = blog; } public Person(Person person) { thisID = personID; thisname = personname; thisblog = personblog; } public Person getPerson(){ return this; } public voID setID(int ID) { thisID = ID; } public int getID(){ return thisID; } public voID setname(String name) { thisname = name; } public String getname() { return thisname; } public voID setBlog(String blog) { thisblog = blog; } public String getBlog() { return thisblog; } public String toString() { return "Person \nID = " + ID + "\nname = " + name + "\nblog = " + blog + "\n"; } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。
以上是内存溢出为你收集整理的Android创建与解析XML(二)――详解Dom方式全部内容,希望文章能够帮你解决Android创建与解析XML(二)――详解Dom方式所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)