国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

XML及PullParser解析

2019-11-14 14:55:53
字體:
供稿:網(wǎng)友

一.什么是xml

1、概念:extensive markup language(可擴(kuò)展的標(biāo)記語言)
  XML是一種通用的數(shù)據(jù)存儲(chǔ)和交換格式,與平臺(tái)無關(guān),與編程語言無關(guān),與操作系統(tǒng)無關(guān)。給數(shù)據(jù)集成和交互提供了極大的便利。將數(shù)據(jù)格式化成XML文件后,真正實(shí)現(xiàn)了據(jù)跨平臺(tái)的交互和共享。在不同語言中,xml的解析方式都一樣。
2、XML的解析:xml parse
  對xml文件進(jìn)行閱讀和分析,提取出希望的數(shù)據(jù)和數(shù)據(jù)屬性。在android開發(fā)中,將xml解析后,把數(shù)據(jù)放進(jìn)List<Map<String, Object>>集合中是我們的最終目的。
3、 XML的解析方式:
  DOM(document object model  :文檔對象模型):借助文檔樹模型對xml文檔進(jìn)行分析
  SAX(simple API for xml  :xml的簡單api):利用事件流的形式解析XML
  PULL:利用事件流模型來解析XML
  備注:DOM和SAX解析的優(yōu)劣分析:DOM是將文檔一次性讀入到內(nèi)存,然后以文檔樹模進(jìn)行分析節(jié)點(diǎn)信息。獲取到希望獲取的數(shù)據(jù);而SAX是事件流的形式去分析xml文件。 DOM可以做到對文檔中部分節(jié)點(diǎn)的修改、刪除和新增,而SAX無法做到。
4、XML文件格式:
  每一個(gè)XML有且只有一個(gè)根節(jié)點(diǎn);
  XML文件的數(shù)據(jù)中不可以 出現(xiàn)"< "或者" >";

二、DOM解析xml

1、核心類:
DocumentBuilderFactory
DocumentBuilder
Doucment
Element
NodeList
Node
 
2、核心代碼:
   DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();   // 使用工廠來實(shí)例化一個(gè)構(gòu)造Document的對象                        DocumentBuilder builder = factory.newDocumentBuilder(); // 利用DocumentBuilder來構(gòu)造一個(gè)Document對象   Document document = builder.parse(filename);  // 獲取Document文檔的根節(jié)點(diǎn)對象   Element root = document.getDocumentElement();  // 通過根節(jié)點(diǎn),獲取到根節(jié)點(diǎn)下面的所有二級子節(jié)點(diǎn)   NodeList nodeList = root.getChildNodes();     // 遍歷子節(jié)點(diǎn),獲取內(nèi)部的每一個(gè)節(jié)點(diǎn)   for (int i = 0; i < nodeList.getLength(); i++) {    Node node = nodeList.item(i);               // 獲取每個(gè)末端階段的文本值和節(jié)點(diǎn)名稱,將其存入到Map對象中               map.put(item.getNodeName(), item.getTextContent());     list.add(map);   }

 三、PULL解析xml

1、核心類:
XmlPullParserFactory
XmlPullParser
2、核心代碼:
 1 // 實(shí)例化一個(gè)xml pull解析的工廠 2 XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); 3 // 實(shí)例化一個(gè)xml pull解析對象 4 XmlPullParser pullParser = factory.newPullParser(); 5 // 將xml文件作為流傳入到inputstream 6 BufferedInputStream bis = new BufferedInputStream( 7 new FileInputStream("customers.xml")); 8   9 // xml解析對象接收輸入流對象10 pullParser.setInput(bis, "utf-8");11  12 int event = pullParser.getEventType();13 List<Map<String, Object>> list = null;14 Map<String, Object> map = null;15  16 while (event != XmlPullParser.END_DOCUMENT) {17 switch (event) {18 case XmlPullParser.START_DOCUMENT:19 list = new ArrayList<>();20 break;21 case XmlPullParser.START_TAG:22 if ("customer".equals(pullParser.getName())) {23 map = new HashMap<String, Object>();24 }25 if (pullParser.getName().equals("name")) {26 map.put("name", pullParser.nextText());27 }28 if (pullParser.getName().equals("tel")) {29 map.put("tel", pullParser.nextText());30 }31 // if (pullParser.getName().equals("email")) {32 // map.put("email", pullParser.nextText());33 // }34 break;35 case XmlPullParser.END_TAG:36 if (pullParser.getName().equals("customer")) {37 list.add(map);38 }39 break;40 }41 event = pullParser.next();42 }

 

3、pull解析方式和dom解析的區(qū)別:
pull解析中使用了switch case,所以可以獲取客戶希望獲取到的內(nèi)容,而不用對整個(gè)xml文件進(jìn)行解析。
 
4、pull parser的使用:(簡單易用)
只有一個(gè)關(guān)鍵方法key(),用于檢索下一個(gè)事件,只有五個(gè)事件類型。

四、DOM TREE結(jié)構(gòu)中對節(jié)點(diǎn)的分類

1、文檔節(jié)點(diǎn)
2、元素節(jié)點(diǎn)
3、屬性節(jié)點(diǎn)
4、文本節(jié)點(diǎn)
5、注釋節(jié)點(diǎn)

五、PULL PARSER中的幾種event值:

1、START_DOCUMENT: 0
2、END_DOCUMENT: 1
3、START_TAG: 2
4、END_TAG: 3
5、TEXT: 4

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 同德县| 蓬莱市| 阿拉善右旗| 五大连池市| 兴宁市| 凤翔县| 宝兴县| 石首市| 浑源县| 夏邑县| 子长县| 时尚| 石台县| 师宗县| 磴口县| 策勒县| 佳木斯市| 沾益县| 临朐县| 南皮县| 湾仔区| 西贡区| 古丈县| 葫芦岛市| 新巴尔虎右旗| 家居| 绥江县| 洪泽县| 开江县| 白城市| 永定县| 化州市| 玛多县| 镇雄县| 雷州市| 苏州市| 灵武市| 钟祥市| 洪雅县| 祁连县| 元氏县|