亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Android 創(chuàng)建與解析XML(五)——詳解Dom4j方式

 更新時(shí)間:2016年11月29日 16:15:05   作者:陽(yáng)光島主  
本篇文章主要介紹了Android創(chuàng)建與解析XML(二)——詳解Dom4j方式,這里整理了詳細(xì)的代碼,有需要的小伙伴可以參考下。

1、Dom4j概述

dom4j is an easy to use, open source library for working with XML, XPath and XSLT on the Java platform using the Java Collections Framework and with full support for DOM, SAX and JAXP.

dom4j官方網(wǎng)址:dom4j 

dom4j源碼下載:dom4j download

本示例中,需要導(dǎo)入dom4j.jar包,才能引用dom4j相關(guān)類(lèi),dom4j源碼和jar包,請(qǐng)見(jiàn)本示例【源碼下載】或訪問(wèn) dom4j

org.dom4j包,不僅包含創(chuàng)建xml的構(gòu)建器類(lèi)DocumentHelper、Element,而且還包含解析xml的解析器SAXReader、Element,包含類(lèi)如下:

org.dom4j

  • org.dom4j.DocumentHelper;
  • org.dom4j.Element;
  • org.dom4j.io.SAXReader;
  • org.dom4j.io.XMLWriter;
  • org.dom4j.DocumentException;

創(chuàng)建和解析xml的效果圖:

2、Dom4j 創(chuàng)建 XML

Dom4j,創(chuàng)建xml主要用到了org.dom4j.DocumentHelper、org.dom4j.Document、org.dom4j.io.OutputFormat、org.dom4j.io.XMLWriter

首先,DocumentHelper.createDocument(),創(chuàng)建 org.dom4j.Document 的實(shí)例 doc

接著,通過(guò)doc,設(shè)置xml屬性doc.setXMLEncoding("utf-8")、doc.addElement("root")根節(jié)點(diǎn),以及子節(jié)點(diǎn)等

然后,定義xml格式并輸出,new XMLWriter(xmlWriter, outputFormat)

/** Dom4j方式,創(chuàng)建 XML */ 
public String dom4jXMLCreate(){ 
  StringWriter xmlWriter = new StringWriter(); 
 
  Person []persons = new Person[3];    // 創(chuàng)建節(jié)點(diǎn)Person對(duì)象 
  persons[0] = new Person(1, "sunboy_2050", "http://blogcsdnnet/sunboy_2050"); 
  persons[1] = new Person(2, "baidu", "http://wwwbaiducom"); 
  persons[2] = new Person(3, "google", "http://wwwgooglecom"); 
   
  try { 
    orgdom4jDocument doc = DocumentHelpercreateDocument(); 
     
    docsetXMLEncoding("utf-8"); 
     
    orgdom4jElement eleRoot = docaddElement("root"); 
    eleRootaddAttribute("author", "homer"); 
    eleRootaddAttribute("date", "2012-04-25"); 
    eleRootaddComment("dom4j test"); 
     
    int personsLen = personslength; 
    for(int i=0; i<personsLen; i++){ 
       
      Element elePerson = eleRootaddElement("person");  // 創(chuàng)建person節(jié)點(diǎn),引用類(lèi)為 orgdom4jElement 
       
      Element eleId = elePersonaddElement("id"); 
      eleIdaddText(persons[i]getId()+""); 
       
      Element eleName = elePersonaddElement("name"); 
      eleNameaddText(persons[i]getName()); 
       
      Element eleBlog = elePersonaddElement("blog"); 
      eleBlogaddText(persons[i]getBlog()); 
    } 
 
    orgdom4jioOutputFormat outputFormat = new orgdom4jioOutputFormat();  // 設(shè)置xml輸出格式 
    outputFormatsetEncoding("utf-8"); 
    outputFormatsetIndent(false); 
    outputFormatsetNewlines(true); 
    outputFormatsetTrimText(true); 
     
    orgdom4jioXMLWriter output = new XMLWriter(xmlWriter, outputFormat);   // 保存xml 
    outputwrite(doc); 
    outputclose(); 
  } catch (Exception e) { 
    eprintStackTrace(); 
  } 
   
  savedXML(fileName, xmlWritertoString()); 
  return xmlWritertoString(); 
} 

運(yùn)行結(jié)果:

3、Dom4j 解析 XML

Dom4j,解析xml主要用到了org.dom4j.io.SAXReader、org.dom4j.Document、doc.getRootElement(),以及ele.getName()、ele.getText()等

首先,創(chuàng)建SAXReader的實(shí)例reader,讀入xml字節(jié)流 reader.read(is)

接著,通過(guò)doc.getRootElement()得到root根節(jié)點(diǎn),利用迭代器取得root下一級(jí)的子節(jié)點(diǎn)eleRoot.elementIterator()等

然后,得到解析的xml內(nèi)容xmlWriter.append(xmlHeader)、xmlWriter.append(personsList.get(i).toString())

解析一:標(biāo)準(zhǔn)解析(Iterator 迭代)

/** Dom4j方式,解析 XML */ 
public String dom4jXMLResolve(){ 
  StringWriter xmlWriter = new StringWriter(); 
   
  InputStream is = readXML(fileName); 
  try { 
    SAXReader reader = new SAXReader(); 
    orgdom4jDocument doc = readerread(is); 
 
    List<Person> personsList = null; 
    Person person = null; 
    StringBuffer xmlHeader = new StringBuffer(); 
     
     
    Element eleRoot = docgetRootElement();   // 獲得root根節(jié)點(diǎn),引用類(lèi)為 orgdom4jElement 
    String attrAuthor = eleRootattributeValue("author"); 
    String attrDate = eleRootattributeValue("date"); 
    xmlHeaderappend("root")append("\t\t"); 
    xmlHeaderappend(attrAuthor)append("\t"); 
    xmlHeaderappend(attrDate)append("\n"); 
    personsList = new ArrayList<Person>(); 
     
    // 獲取root子節(jié)點(diǎn),即person 
    Iterator<Element> iter = eleRootelementIterator(); 
    for(; iterhasNext(); ) { 
      Element elePerson = (Element)iternext(); 
       
      if("person"equals(elePersongetName())){ 
        person = new Person(); 
         
        // 獲取person子節(jié)點(diǎn),即id、name、blog 
        Iterator<Element> innerIter = elePersonelementIterator(); 
        for(; innerIterhasNext();) { 
          Element ele = (Element)innerIternext(); 
           
          if("id"equals(elegetName())) { 
            String id = elegetText(); 
            personsetId(IntegerparseInt(id)); 
          } else if("name"equals(elegetName())) { 
            String name = elegetText(); 
            personsetName(name); 
          } else if("blog"equals(elegetName())) { 
            String blog = elegetText(); 
            personsetBlog(blog); 
          } 
        } 
         
        personsListadd(person); 
        person = null; 
      } 
    } 
     
    xmlWriterappend(xmlHeader); 
    int personsLen = personsListsize(); 
    for(int i=0; i<personsLen; i++) { 
      xmlWriterappend(personsListget(i)toString()); 
    } 
     
  } catch (DocumentException e) { 
    eprintStackTrace(); 
  } catch (Exception e) { 
    eprintStackTrace(); 
  } 
   
  return xmlWritertoString(); 
} 

運(yùn)行結(jié)果:

解析二:選擇性解析(XPath路徑)

Dom4j+XPath,選擇性只解析id,doc.selectNodes("http://root//person//id")

/** Dom4j方式,解析 XML(方式二) */ 
public String dom4jXMLResolve2(){ 
  StringWriter xmlWriter = new StringWriter(); 
   
  InputStream is = readXML(fileName); 
  try { 
    orgdom4jioSAXReader reader = new orgdom4jioSAXReader(); 
    orgdom4jDocument doc = readerread(is); 
 
    List<Person> personsList = null; 
    Person person = null; 
    StringBuffer xmlHeader = new StringBuffer(); 
     
     
    Element eleRoot = docgetRootElement();   // 獲得root根節(jié)點(diǎn),引用類(lèi)為 orgdom4jElement 
    String attrAuthor = eleRootattributeValue("author"); 
    String attrDate = eleRootattributeValue("date"); 
    xmlHeaderappend("root")append("\t\t"); 
    xmlHeaderappend(attrAuthor)append("\t"); 
    xmlHeaderappend(attrDate)append("\n"); 
    personsList = new ArrayList<Person>(); 
     
    @SuppressWarnings("unchecked") 
    List<Element> idList = (List<Element>) docselectNodes("http://root//person//id");  // 選擇性獲取全部id 
    Iterator<Element> idIter = idListiterator(); 
    while(idIterhasNext()){ 
      person = new Person(); 
       
      Element idEle = (Element)idIternext(); 
      String id = idElegetText(); 
      personsetId(IntegerparseInt(id)); 
       
      personsListadd(person); 
    } 
 
    xmlWriterappend(xmlHeader); 
    int personsLen = personsListsize(); 
    for(int i=0; i<personsLen; i++) { 
      xmlWriterappend("id = ")append(personsListget(i)getId()+"")append("\n"); 
    } 
     
  } catch (DocumentException e) { 
    eprintStackTrace(); 
  } catch (Exception e) { 
    eprintStackTrace(); 
  } 
   
  return xmlWritertoString(); 
} 

注:借助 XPath 解析 XML 時(shí),需要導(dǎo)入 jaxen;

Jaxen is an open source XPath library written in Java. It is adaptable to many different object models, including DOM, XOM, dom4j, and JDOM. Is it also possible to write adapters that treat non-XML trees such as compiled Java byte code or Java beans as XML, thus enabling you to query these trees with XPath too.

運(yùn)行結(jié)果:

4、Person類(lèi)

請(qǐng)參見(jiàn)前面博客 Android 創(chuàng)建與解析XML(二)—— Dom方式 【4、Person類(lèi)】

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Android Studio Gradle 更換阿里云鏡像的方法

    Android Studio Gradle 更換阿里云鏡像的方法

    這篇文章主要介紹了Android Studio Gradle 更換阿里云鏡像的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Android適配底部虛擬按鍵的方法詳解

    Android適配底部虛擬按鍵的方法詳解

    今天小編就為大家分享一篇Android適配底部虛擬按鍵的方法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • Android中RecyclerView的item寬高問(wèn)題詳解

    Android中RecyclerView的item寬高問(wèn)題詳解

    RecyclerView出現(xiàn)已經(jīng)有一段時(shí)間了,相信大家肯定不陌生了,下面這篇文章主要給大家介紹了關(guān)于Android中RecyclerView的item寬高問(wèn)題的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-08-08
  • Android打造炫酷進(jìn)度條效果

    Android打造炫酷進(jìn)度條效果

    這篇文章主要為大家詳細(xì)介紹了Android打造炫酷進(jìn)度條效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • Android實(shí)現(xiàn)炫酷輪播圖效果

    Android實(shí)現(xiàn)炫酷輪播圖效果

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)炫酷輪播圖效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • Android實(shí)現(xiàn)直接播放麥克風(fēng)采集到的聲音

    Android實(shí)現(xiàn)直接播放麥克風(fēng)采集到的聲音

    這篇文章主要介紹了Android實(shí)現(xiàn)直接播放麥克風(fēng)采集到的聲音,涉及Android音頻操作的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • kotlin協(xié)程之coroutineScope函數(shù)使用詳解

    kotlin協(xié)程之coroutineScope函數(shù)使用詳解

    這篇文章主要為大家介紹了kotlin協(xié)程之coroutineScope函數(shù)使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • Android中實(shí)時(shí)獲取音量分貝值詳解

    Android中實(shí)時(shí)獲取音量分貝值詳解

    這篇文章主要介紹了Android中實(shí)時(shí)獲取音量分貝值詳解,本文講解了基礎(chǔ)知識(shí)、Android API、MediaRecorder、AudioRecord等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • Android 自定義SeekBar 實(shí)現(xiàn)分段顯示不同背景顏色的示例代碼

    Android 自定義SeekBar 實(shí)現(xiàn)分段顯示不同背景顏色的示例代碼

    這篇文章主要介紹了Android 自定義SeekBar 實(shí)現(xiàn)分段顯示不同背景顏色,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • ANDROID中自定義對(duì)話框AlertDialog使用示例

    ANDROID中自定義對(duì)話框AlertDialog使用示例

    這篇文章主要為大家詳細(xì)介紹了Android中自定義對(duì)話框AlertDialog使用示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-12-12

最新評(píng)論