Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了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.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;

创建和解析xml的效果图:

Android创建与解析XML(二)――详解Dom方式

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.code.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(); 
} 

运行结果:

Android创建与解析XML(二)――详解Dom方式


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(); 
} 

运行结果:

Android创建与解析XML(二)――详解Dom方式


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方式所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:androiddomxml