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

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

xml介紹與解析

2019-11-09 19:02:20
字體:
供稿:網(wǎng)友

一、了解xml

1.xml

extended Markup Language可擴(kuò)展標(biāo)記語言

<?xml version="1.0" encoding="UTF-8"?><weatherinfo><cityname>北京</cityname><citycode>101010100</citycode><citydesc>北京</citydesc><publishtime>2015年03月20日11:00</publishtime><lastupdate>2015-03-20 11:08:10</lastupdate><data><date>2015-03-20</date><icon>d00|n00</icon><weather>晴間多云</weather><temperature>20°C/6°C</temperature><winddirect>無持續(xù)風(fēng)向轉(zhuǎn)北風(fēng)微風(fēng)轉(zhuǎn)3-4級(jí)</winddirect></data><data><date>2015-03-21</date><icon>d00|n01</icon><weather>晴</weather><temperature>19°C/4°C</temperature><winddirect>北風(fēng)4-5級(jí)轉(zhuǎn)3-4級(jí)</winddirect></data><data><date>2015-03-22</date><icon>d01|n00</icon><weather>多云轉(zhuǎn)晴</weather><temperature>14°C/3°C</temperature><winddirect>無持續(xù)風(fēng)向微風(fēng)</winddirect></data><data><date>2015-03-23</date><icon>d00|n00</icon><weather>晴</weather><temperature>15°C/3°C</temperature><winddirect>無持續(xù)風(fēng)向微風(fēng)</winddirect></data><data><date>2015-03-24</date><icon>d00|n01</icon><weather>晴轉(zhuǎn)多云</weather><temperature>16°C/5°C</temperature><winddirect>無持續(xù)風(fēng)向微風(fēng)</winddirect></data><data><date>2015-03-25</date><icon>d01|n01</icon><weather>多云</weather><temperature>16°C/5°C</temperature><winddirect>無持續(xù)風(fēng)向微風(fēng)</winddirect></data><data><date>2015-03-26</date><icon>d01|n01</icon><weather>多云</weather><temperature>20°C/5°C</temperature><winddirect>南風(fēng)轉(zhuǎn)無持續(xù)風(fēng)向3-4級(jí)轉(zhuǎn)微風(fēng)</winddirect></data><live><updatetime>10:20</updatetime><temperature>9℃</temperature><humidity>26%</humidity><winddirect>南風(fēng)2級(jí)</winddirect></live></weatherinfo>

就是這么一種格式的字符串(weatherinfo)

xml簡(jiǎn)述

XML是一種數(shù)據(jù)存儲(chǔ)和傳輸?shù)某S酶袷剿caccessOracle和SQL Server等數(shù)據(jù)庫不同,數(shù)據(jù)庫提供了更強(qiáng)有力的數(shù)據(jù)存儲(chǔ)和分析能力,例如:數(shù)據(jù)索引、排序、查找、相關(guān)一致性等,它僅僅是存儲(chǔ)數(shù)據(jù)。事實(shí)上它與其他數(shù)據(jù)表現(xiàn)形式最大的不同是:它極其簡(jiǎn)單,這是一個(gè)看上去有點(diǎn)瑣細(xì)的優(yōu)點(diǎn),但正是這點(diǎn)使它與眾不同。平臺(tái)無關(guān)性,語言無關(guān)性,系統(tǒng)無關(guān)性DOM:Document Object Model,文檔對(duì)象模型,DOM 是基于 XML 文檔樹結(jié)構(gòu)的解析。這種方式是 W3C 推薦的處理 XML 的一種方式

xml書寫

開始標(biāo)簽和結(jié)束標(biāo)簽對(duì)應(yīng)。必須正確地嵌套,重復(fù)標(biāo)簽不能嵌套區(qū)分大小寫文檔必須有根元素它的屬性值須加引號(hào) < student id=”1”>注釋< ! – 注釋 –>

xml組成

前導(dǎo)區(qū)

<?xml version="1.0" encoding="UTF-8" ?>

version:版本號(hào);encoding:字符集

數(shù)據(jù)區(qū)

XML 文檔形成一種樹結(jié)構(gòu) XML 文檔必須包含根元素。該元素是所有其他元素的父元素 XML 文檔中的元素形成了一棵文檔樹。這棵樹從根部開始,并擴(kuò)展到樹的最底端

實(shí)體引用(類似轉(zhuǎn)義字符)

&lt; < 小于 &gt; > 大于 &amp; & 與 &apos; ' 單引號(hào) &quot; " 引號(hào) 等等。。。

命名規(guī)則

名稱可以含字母、數(shù)字以及其他的字符 名稱不能以數(shù)字或者標(biāo)點(diǎn)符號(hào)開始 名稱不能以字符 “xml”(或者 XML、Xml)開始 名稱不能包含空格 可使用任何名稱,沒有保留的字詞

二、解析xml

三種解析方法:DOM,SAX,PULL(我只知道這三種 O(∩_∩ )O哈哈~ )

DOM:Document Object Model,文檔對(duì)象模型,DOM 是基于 XML 文檔樹結(jié)構(gòu) 的解析。這種方式是 W3C 推薦的處理 XML 的一種方式

在安卓中內(nèi)置了pull解析器,所以主要介紹pull解析

pull解析器

pull解析器是android內(nèi)置的解析器,解析原理與sax類似pull提供了類似的事件。 如:開始元素和結(jié)束元素事件,使用parser.next()可以進(jìn)入下一個(gè)元素并觸發(fā)相應(yīng)的事件,事件將作為數(shù)值代碼被發(fā)送,因此可以使用一個(gè)switch對(duì)感興趣的事件進(jìn)行處理。當(dāng)元素開始解析時(shí),調(diào)用parser.nextText()方法獲取下一個(gè)Text類型節(jié)點(diǎn)的值

以事件驅(qū)動(dòng)的方式解析

0:(XmlPullParser.START_DOCUMENT);文檔開始 1:(XmlPullParser.END_DOCUMENT);文檔結(jié)束 2:(XmlPullParser.START_TAG);標(biāo)簽開始 3:(XmlPullParser.END_TAG);標(biāo)簽結(jié)束 4:(XmlPullParser.TEXT);用于處理文本節(jié)點(diǎn)(凡是文本,包括空格/換行/元素中的文本(非屬性)都會(huì)取出來)

解析步驟

創(chuàng)建pull解析的工廠類對(duì)象XmlPullParserFactory factory = XmlPullParserFactory.newInstance();//注意大小寫創(chuàng)建解析器XmlPullParser parser = factory.newPullParser();指定解析文件parser.setInput(new FileReader("student.xml"));//我的文件是放在項(xiàng)目根目錄下在項(xiàng)目根目錄下,形參是Reader類型.parser.setInput(new FileInputStream("student.xml"),"utf-8");解析中文,形參是InputStream類型.獲得事件狀態(tài)碼int eventType = parser.getEventType();在開始解析之前要先獲取一次

循環(huán)解析,直到文檔結(jié)束

parser.getName();獲取標(biāo)簽名稱 parser.nextText()獲取標(biāo)簽內(nèi)部的文本(tag匹配子元素而非對(duì)象根元素時(shí)) XmlPullParser.TEXT中會(huì)用到parser.getText();獲取當(dāng)前節(jié)點(diǎn)的文本(適用于單行對(duì)象,沒有子節(jié)點(diǎn)的文檔) eventType=parser.next();獲取下一個(gè)標(biāo)簽的事件類型,用在循環(huán)體里面的最后一句 :xml單行元素的pull解析

while (eventType != XmlPullParser.END_DOCUMENT) { String tagName = parser.getName(); switch (eventType) { case XmlPullParser.START_DOCUMENT: list = new ArrayList<Month>(); break; case XmlPullParser.START_TAG: if ("month".equals(tagName)) { month = new Month(); int attributeCount = parser.getAttributeCount(); for (int i = 0; i < attributeCount; i++) { String attrName = parser.getAttributeName(i); String attrValue = parser.getAttributeValue(i); if ("id".equals(attrName)) { month.setId(Integer.parseInt(attrValue)); } else if ("shop".equals(attrName)) { month.setShop(attrValue); } else if ("附上Demo:

解析student.xml xml如下:

<?xml version="1.0" encoding="UTF-8"?><students> <student id="1" id1="2"> <name>張三</name> <sex>男</sex> <age>20</age> </student> <student id="2"> <name>李四</name> <sex>男</sex> <age>22</age> </student> <student id="3"> <name>王五</name> <sex>男</sex> <age>23</age> </student></students>

為了方便輸出觀察,寫了個(gè)Student對(duì)象,用于輸出解析的結(jié)果 Student.java

public class Student { private int id; private String name; private String sex; private int age; public Student() { } public Student(int id, String name, String sex, int age) { this.id = id; this.name = name; this.sex = sex; this.age = age; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Student [id=" + id + ", name=" + name + ", sex=" + sex + ", age=" + age + "]"; }}public class PullParseDemo1 { public static void main(String[] args) throws XmlPullParserException, IOException { List<Student> students = null; Student student = null; // 1、獲取一個(gè)XmlPullParser解析器. XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); // 調(diào)用解析器工廠的靜態(tài)方法,創(chuàng)建一個(gè)解析器工廠 XmlPullParser parser = factory.newPullParser(); // 創(chuàng)建一個(gè)pull解析器 parser.setInput(new FileReader("students.xml")); // 設(shè)置一個(gè)輸入流,告訴要解析的xml數(shù)據(jù)的來源 int event = parser.getEventType(); // 獲取當(dāng)前事件的類型 while (event != END_DOCUMENT) { // 當(dāng)碰到文檔結(jié)束的時(shí)候,結(jié)束循環(huán) switch (event) { case START_TAG: String tag = parser.getName(); if("students".equals(tag)){ students = new ArrayList<Student>(); }else if("student".equals(tag)){ student = new Student();// System.out.println(parser.getAttributeCount()); //獲取這個(gè)標(biāo)簽的屬性的個(gè)數(shù)。// System.out.println(parser.getAttributeName(0)); //獲取指定索引的屬性的名字 student.setId(Integer.parseInt(parser.getAttributeValue(null, "id"))); System.out.println(parser.getAttributeValue(null, "id")); //參數(shù)1:是命名空間,如果命名空間,則傳入null。參數(shù)2:屬性的名字 students.add(student); }else if("name".equals(tag)){ student.setName(parser.nextText()); //獲取當(dāng)前事件后面的text事件,text的值 }else if("age".equals(tag)){ student.setAge(Integer.parseInt(parser.nextText())); //獲取當(dāng)前事件后面的text事件,text的值 }else if("sex".equals(tag)){ student.setSex(parser.nextText()); //獲取當(dāng)前事件后面的text事件,text的值 } break; case END_TAG:// System.out.println("碰到了結(jié)束標(biāo)簽" + " " + parser.getName()); break; case TEXT:// System.out.println("碰到了文本標(biāo)簽" +" " + parser.getText()); break; default: break; } event = parser.next(); } for (Student student2 : students) { System.out.println(student2); } }}

運(yùn)行,結(jié)果如下: 這里寫圖片描述

xml解析就完成了


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 泽普县| 吴忠市| 秀山| 贵定县| 潮安县| 黄山市| 自治县| 彩票| 城口县| 南木林县| 鄂托克前旗| 宽甸| 香港 | 海晏县| 乌兰浩特市| 浏阳市| 新丰县| 安图县| 贞丰县| 瓮安县| 博野县| 柘荣县| 康马县| 家居| 崇阳县| 东方市| 蓝田县| 马尔康县| 玛沁县| 正安县| 绥宁县| 壤塘县| 新安县| 迭部县| 临沧市| 博湖县| 饶阳县| 姜堰市| 四会市| 沐川县| 巧家县|