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)
前導(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ù)字以及其他的字符 名稱不能以數(shù)字或者標(biāo)點(diǎn)符號(hào)開始 名稱不能以字符 “xml”(或者 XML、Xml)開始 名稱不能包含空格 可使用任何名稱,沒有保留的字詞
三種解析方法:DOM,SAX,PULL(我只知道這三種 O(∩_∩ )O哈哈~ )
DOM:Document Object Model,文檔對(duì)象模型,DOM 是基于 XML 文檔樹結(jié)構(gòu) 的解析。這種方式是 W3C 推薦的處理 XML 的一種方式
在安卓中內(nèi)置了pull解析器,所以主要介紹pull解析
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ì)取出來)
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解析就完成了
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注