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
-
- publicStringdomCreateXML(){
- StringxmlWriter=null;
-
- Person[]persons=newPerson[3];
- persons[0]=newPerson(1,"sunboy_2050","http://blog.csdn.net/sunboy_2050");
- 1]=newPerson(2,"baidu","http://www.baidu.com");
- 2]=newPerson(3,"google","http://www.google.com");
-
- try{
- DocumentBuilderFactoryfactory=DocumentBuilderFactory.newInstance();
- DocumentBuilderbuilder=factory.newDocumentBuilder();
- Documentdoc=builder.newDocument();
- ElementeleRoot=doc.createElement("root");
- eleRoot.setAttribute("author","homer");
- eleRoot.setAttribute("date","2012-04-26");
- doc.appendChild(eleRoot);
- intpersonsLen=persons.length;
- for(inti=0;i<personsLen;i++){
- ElementelePerson=doc.createElement("person");
- eleRoot.appendChild(elePerson);
- ElementeleId=doc.createElement("id");
- NodenodeId=doc.createTextNode(persons[i].getId()+"");
- eleId.appendChild(nodeId);
- elePerson.appendChild(eleId);
- ElementeleName=doc.createElement("name");
- NodenodeName=doc.createTextNode(persons[i].getName());
- eleName.appendChild(nodeName);
- elePerson.appendChild(eleName);
- ElementeleBlog=doc.createElement("blog");
- NodenodeBlog=doc.createTextNode(persons[i].getBlog());
- eleBlog.appendChild(nodeBlog);
- elePerson.appendChild(eleBlog);
- }
- Propertiesproperties=newProperties();
- 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");
- TransformerFactorytransformerFactory=TransformerFactory.newInstance();
- Transformertransformer=transformerFactory.newTransformer();
- transformer.setOutputProperties(properties);
- DOMSourcedomSource=newDOMSource(doc.getDocumentElement());
- OutputStreamoutput=newByteArrayOutputStream();
- StreamResultresult=newStreamResult(output);
- transformer.transform(domSource,result);
- xmlWriter=output.toString();
- }catch(ParserConfigurationExceptione){
- e.printStackTrace();
- }catch(DOMExceptione){
- }catch(TransformerFactoryConfigurationErrore){
- }catch(TransformerConfigurationExceptione){
- }catch(TransformerExceptione){
- }catch(Exceptione){
- savedXML(fileName,xmlWriter.toString());
- returnxmlWriter.toString();
- }
运行结果:
3、Dom 解析 XML
Dom方式,解析XML是创建XML的逆过程,主要用到了builder.parse(is)进行解析,然后通过Tag、NodeList、Element、childNotes等得到Element和Node属性或值。
Code
/**Dom方式,解析XML*/
- publicStringdomResolveXML(){
- StringWriterxmlWriter=newStringWriter();
- InputStreamis=readXML(fileName);
- Documentdoc=builder.parse(is);
- doc.getDocumentElement().normalize();
- NodeListnlRoot=doc.getElementsByTagName("root");
- ElementeleRoot=(Element)nlRoot.item(0);
- StringattrAuthor=eleRoot.getAttribute("author");
- StringattrDate=eleRoot.getAttribute("date");
- xmlWriter.append("root").append("tt");
- xmlWriter.append(attrAuthor).append("t");
- xmlWriter.append(attrDate).append("n");
- NodeListnlPerson=eleRoot.getElementsByTagName("person");
- intpersonsLen=nlPerson.getLength();
- Person[]persons=newPerson[personsLen];
- ElementelePerson=(Element)nlPerson.item(i);
- Personperson=newPerson();
- NodeListnlId=elePerson.getElementsByTagName("id");
- ElementeleId=(Element)nlId.item(0);
- Stringid=eleId.getChildNodes().item(0).getNodeValue();
- person.setId(Integer.parseInt(id));
- NodeListnlName=elePerson.getElementsByTagName("name");
- ElementeleName=(Element)nlName.item( Stringname=eleName.getChildNodes().item(0).getNodeValue();
- person.setName(name);
- NodeListnlBlog=elePerson.getElementsByTagName("blog");
- ElementeleBlog=(Element)nlBlog.item( Stringblog=eleBlog.getChildNodes().item( person.setBlog(blog);
- xmlWriter.append(person.toString()).append("n");
- persons[i]=person;
- }
- //factory.newDocumentBuilder
- e.printStackTrace();
- }catch(SAXExceptione){
- }catch(IOExceptione){
- returnxmlWriter.toString();
- }
运行结果:
4、Person类
Person类,是创建xml的单位实例,基于Java面向对象定义的一个类
publicclassPerson{
- privateintid;
- privateStringname;
- privateStringblog;
- publicPerson(){
- this.id=-1;
- this.name="";
- this.blog="";
- publicPerson(intid,Stringname,Stringblog){
- this.id=id;
- this.name=name;
- this.blog=blog;
- publicPerson(Personperson){
- this.id=person.id;
- this.name=person.name;
- this.blog=person.blog;
- publicPersongetPerson(){
- returnthis;
- publicvoidsetId(intid){
- publicintgetId(){
- returnthis.id;
- publicvoidsetName(Stringname){
- this.name=name;
- publicStringgetName(){
- returnthis.name;
- publicvoidsetBlog(Stringblog){
- publicStringgetBlog(){
- returnthis.blog;
- publicStringtoString(){
- return"Personnid="+id+"nname="+name+"nblog="+blog+"n";
- }
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|