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

[java] view plain copy print ?
  1. /**Dom方式,创建XML*/
  2. publicStringdomCreateXML(){
  3. StringxmlWriter=null;
  4. Person[]persons=newPerson[3];//创建节点Person对象
  5. persons[0]=newPerson(1,"sunboy_2050","http://blog.csdn.net/sunboy_2050");
  6. persons[1]=newPerson(2,"baidu","http://www.baidu.com");
  7. persons[2]=newPerson(3,"google","http://www.google.com");
  8. try{
  9. DocumentBuilderFactoryfactory=DocumentBuilderFactory.newInstance();
  10. DocumentBuilderbuilder=factory.newDocumentBuilder();
  11. Documentdoc=builder.newDocument();
  12. ElementeleRoot=doc.createElement("root");
  13. eleRoot.setAttribute("author","homer");
  14. eleRoot.setAttribute("date","2012-04-26");
  15. doc.appendChild(eleRoot);
  16. intpersonsLen=persons.length;
  17. for(inti=0;i<personsLen;i++){
  18. ElementelePerson=doc.createElement("person");
  19. eleRoot.appendChild(elePerson);
  20. ElementeleId=doc.createElement("id");
  21. NodenodeId=doc.createTextNode(persons[i].getId()+"");
  22. eleId.appendChild(nodeId);
  23. elePerson.appendChild(eleId);
  24. ElementeleName=doc.createElement("name");
  25. NodenodeName=doc.createTextNode(persons[i].getName());
  26. eleName.appendChild(nodeName);
  27. elePerson.appendChild(eleName);
  28. ElementeleBlog=doc.createElement("blog");
  29. NodenodeBlog=doc.createTextNode(persons[i].getBlog());
  30. eleBlog.appendChild(nodeBlog);
  31. elePerson.appendChild(eleBlog);
  32. }
  33. Propertiesproperties=newProperties();
  34. properties.setProperty(OutputKeys.INDENT,"yes");
  35. properties.setProperty(OutputKeys.MEDIA_TYPE,"xml");
  36. properties.setProperty(OutputKeys.VERSION,"1.0");
  37. properties.setProperty(OutputKeys.ENCODING,"utf-8");
  38. properties.setProperty(OutputKeys.METHOD,"xml");
  39. properties.setProperty(OutputKeys.OMIT_XML_DECLARATION,"yes");
  40. TransformerFactorytransformerFactory=TransformerFactory.newInstance();
  41. Transformertransformer=transformerFactory.newTransformer();
  42. transformer.setOutputProperties(properties);
  43. DOMSourcedomSource=newDOMSource(doc.getDocumentElement());
  44. OutputStreamoutput=newByteArrayOutputStream();
  45. StreamResultresult=newStreamResult(output);
  46. transformer.transform(domSource,result);
  47. xmlWriter=output.toString();
  48. }catch(ParserConfigurationExceptione){//factory.newDocumentBuilder
  49. e.printStackTrace();
  50. }catch(DOMExceptione){//doc.createElement
  51. e.printStackTrace();
  52. }catch(TransformerFactoryConfigurationErrore){//TransformerFactory.newInstance
  53. e.printStackTrace();
  54. }catch(TransformerConfigurationExceptione){//transformerFactory.newTransformer
  55. e.printStackTrace();
  56. }catch(TransformerExceptione){//transformer.transform
  57. e.printStackTrace();
  58. }catch(Exceptione){
  59. e.printStackTrace();
  60. }
  61. savedXML(fileName,xmlWriter.toString());
  62. returnxmlWriter.toString();
  63. }

运行结果:





3、Dom 解析 XML

Dom方式,解析XML是创建XML的逆过程,主要用到了builder.parse(is)进行解析,然后通过Tag、NodeList、Element、childNotes等得到Element和Node属性或值。

Code

[java] view plain copy print ?
  1. /**Dom方式,解析XML*/
  2. publicStringdomResolveXML(){
  3. StringWriterxmlWriter=newStringWriter();
  4. InputStreamis=readXML(fileName);
  5. try{
  6. DocumentBuilderFactoryfactory=DocumentBuilderFactory.newInstance();
  7. DocumentBuilderbuilder=factory.newDocumentBuilder();
  8. Documentdoc=builder.parse(is);
  9. doc.getDocumentElement().normalize();
  10. NodeListnlRoot=doc.getElementsByTagName("root");
  11. ElementeleRoot=(Element)nlRoot.item(0);
  12. StringattrAuthor=eleRoot.getAttribute("author");
  13. StringattrDate=eleRoot.getAttribute("date");
  14. xmlWriter.append("root").append("\t\t");
  15. xmlWriter.append(attrAuthor).append("\t");
  16. xmlWriter.append(attrDate).append("\n");
  17. NodeListnlPerson=eleRoot.getElementsByTagName("person");
  18. intpersonsLen=nlPerson.getLength();
  19. Person[]persons=newPerson[personsLen];
  20. for(inti=0;i<personsLen;i++){
  21. ElementelePerson=(Element)nlPerson.item(i);//person节点
  22. Personperson=newPerson();//创建Person对象
  23. NodeListnlId=elePerson.getElementsByTagName("id");
  24. ElementeleId=(Element)nlId.item(0);
  25. Stringid=eleId.getChildNodes().item(0).getNodeValue();
  26. person.setId(Integer.parseInt(id));
  27. NodeListnlName=elePerson.getElementsByTagName("name");
  28. ElementeleName=(Element)nlName.item(0);
  29. Stringname=eleName.getChildNodes().item(0).getNodeValue();
  30. person.setName(name);
  31. NodeListnlBlog=elePerson.getElementsByTagName("blog");
  32. ElementeleBlog=(Element)nlBlog.item(0);
  33. Stringblog=eleBlog.getChildNodes().item(0).getNodeValue();
  34. person.setBlog(blog);
  35. xmlWriter.append(person.toString()).append("\n");
  36. persons[i]=person;
  37. }
  38. }catch(ParserConfigurationExceptione){//factory.newDocumentBuilder
  39. e.printStackTrace();
  40. }catch(SAXExceptione){//builder.parse
  41. e.printStackTrace();
  42. }catch(IOExceptione){//builder.parse
  43. e.printStackTrace();
  44. }catch(Exceptione){
  45. e.printStackTrace();
  46. }
  47. returnxmlWriter.toString();
  48. }

运行结果:





4、Person类

Person类,是创建xml的单位实例,基于Java面向对象定义的一个类

[java] view plain copy print ?
  1. publicclassPerson{
  2. privateintid;
  3. privateStringname;
  4. privateStringblog;
  5. publicPerson(){
  6. this.id=-1;
  7. this.name="";
  8. this.blog="";
  9. }
  10. publicPerson(intid,Stringname,Stringblog){
  11. this.id=id;
  12. this.name=name;
  13. this.blog=blog;
  14. }
  15. publicPerson(Personperson){
  16. this.id=person.id;
  17. this.name=person.name;
  18. this.blog=person.blog;
  19. }
  20. publicPersongetPerson(){
  21. returnthis;
  22. }
  23. publicvoidsetId(intid){
  24. this.id=id;
  25. }
  26. publicintgetId(){
  27. returnthis.id;
  28. }
  29. publicvoidsetName(Stringname){
  30. this.name=name;
  31. }
  32. publicStringgetName(){
  33. returnthis.name;
  34. }
  35. publicvoidsetBlog(Stringblog){
  36. this.blog=blog;
  37. }
  38. publicStringgetBlog(){
  39. returnthis.blog;
  40. }
  41. publicStringtoString(){
  42. return"Person\nid="+id+"\nname="+name+"\nblog="+blog+"\n";
  43. }
  44. }



代码下载



参考推荐:

org.w3c.dom

javax.xml.parsers

javax.xml.transform


dom创建xml

java dom创建xml


更多相关文章

  1. android 里 meta-data 的使用
  2. android实现文件下载功能
  3. Android(安卓)APP启动过程中应用代码的加载
  4. Android(安卓)播放视频的方法+播放测试地址 http
  5. Android如何设置圆角按钮 类似微信的登陆按钮
  6. android4.4 Launcher主菜单界面同样采用背景图片的方式
  7. Android5.0—"沉浸式"体验
  8. 管理应用自启动的方案
  9. Android(安卓)xml文件的序列化

随机推荐

  1. android / ffmpeg dynamic module, JNI s
  2. android之webview使用-处理404等错误
  3. android 数据库操作 GreenDAO 第三方开源
  4. Android 实现简单打电话
  5. 开源库android-state-button 为Android
  6. Android 根据item大小实现自动排列的Grid
  7. android 开发积累
  8. android实现上下滑动
  9. Android 拦截 HOME 按键
  10. android双击返回键退出程序