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

首頁 > 學院 > 開發設計 > 正文

xml介紹與解析

2019-11-09 18:27:25
字體:
來源:轉載
供稿:網友

一、了解xml

1.xml

extended Markup Language可擴展標記語言

<?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>無持續風向轉北風微風轉3-4級</winddirect></data><data><date>2015-03-21</date><icon>d00|n01</icon><weather>晴</weather><temperature>19°C/4°C</temperature><winddirect>北風4-5級轉3-4級</winddirect></data><data><date>2015-03-22</date><icon>d01|n00</icon><weather>多云轉晴</weather><temperature>14°C/3°C</temperature><winddirect>無持續風向微風</winddirect></data><data><date>2015-03-23</date><icon>d00|n00</icon><weather>晴</weather><temperature>15°C/3°C</temperature><winddirect>無持續風向微風</winddirect></data><data><date>2015-03-24</date><icon>d00|n01</icon><weather>晴轉多云</weather><temperature>16°C/5°C</temperature><winddirect>無持續風向微風</winddirect></data><data><date>2015-03-25</date><icon>d01|n01</icon><weather>多云</weather><temperature>16°C/5°C</temperature><winddirect>無持續風向微風</winddirect></data><data><date>2015-03-26</date><icon>d01|n01</icon><weather>多云</weather><temperature>20°C/5°C</temperature><winddirect>南風轉無持續風向3-4級轉微風</winddirect></data><live><updatetime>10:20</updatetime><temperature>9℃</temperature><humidity>26%</humidity><winddirect>南風2級</winddirect></live></weatherinfo>

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

xml簡述

XML是一種數據存儲和傳輸的常用格式它與accessOracle和SQL Server等數據庫不同,數據庫提供了更強有力的數據存儲和分析能力,例如:數據索引、排序、查找、相關一致性等,它僅僅是存儲數據。事實上它與其他數據表現形式最大的不同是:它極其簡單,這是一個看上去有點瑣細的優點,但正是這點使它與眾不同。平臺無關性,語言無關性,系統無關性DOM:Document Object Model,文檔對象模型,DOM 是基于 XML 文檔樹結構的解析。這種方式是 W3C 推薦的處理 XML 的一種方式

xml書寫

開始標簽和結束標簽對應。必須正確地嵌套,重復標簽不能嵌套區分大小寫文檔必須有根元素它的屬性值須加引號 < student id=”1”>注釋< ! – 注釋 –>

xml組成

前導區

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

version:版本號;encoding:字符集

數據區

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

實體引用(類似轉義字符)

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

命名規則

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

二、解析xml

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

DOM:Document Object Model,文檔對象模型,DOM 是基于 XML 文檔樹結構 的解析。這種方式是 W3C 推薦的處理 XML 的一種方式

在安卓中內置了pull解析器,所以主要介紹pull解析

pull解析器

pull解析器是android內置的解析器,解析原理與sax類似pull提供了類似的事件。 如:開始元素和結束元素事件,使用parser.next()可以進入下一個元素并觸發相應的事件,事件將作為數值代碼被發送,因此可以使用一個switch對感興趣的事件進行處理。當元素開始解析時,調用parser.nextText()方法獲取下一個Text類型節點的值

以事件驅動的方式解析

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

解析步驟

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

循環解析,直到文檔結束

parser.getName();獲取標簽名稱 parser.nextText()獲取標簽內部的文本(tag匹配子元素而非對象根元素時) XmlPullParser.TEXT中會用到parser.getText();獲取當前節點的文本(適用于單行對象,沒有子節點的文檔) eventType=parser.next();獲取下一個標簽的事件類型,用在循環體里面的最后一句 :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>

為了方便輸出觀察,寫了個Student對象,用于輸出解析的結果 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、獲取一個XmlPullParser解析器. XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); // 調用解析器工廠的靜態方法,創建一個解析器工廠 XmlPullParser parser = factory.newPullParser(); // 創建一個pull解析器 parser.setInput(new FileReader("students.xml")); // 設置一個輸入流,告訴要解析的xml數據的來源 int event = parser.getEventType(); // 獲取當前事件的類型 while (event != END_DOCUMENT) { // 當碰到文檔結束的時候,結束循環 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()); //獲取這個標簽的屬性的個數。// System.out.println(parser.getAttributeName(0)); //獲取指定索引的屬性的名字 student.setId(Integer.parseInt(parser.getAttributeValue(null, "id"))); System.out.println(parser.getAttributeValue(null, "id")); //參數1:是命名空間,如果命名空間,則傳入null。參數2:屬性的名字 students.add(student); }else if("name".equals(tag)){ student.setName(parser.nextText()); //獲取當前事件后面的text事件,text的值 }else if("age".equals(tag)){ student.setAge(Integer.parseInt(parser.nextText())); //獲取當前事件后面的text事件,text的值 }else if("sex".equals(tag)){ student.setSex(parser.nextText()); //獲取當前事件后面的text事件,text的值 } break; case END_TAG:// System.out.println("碰到了結束標簽" + " " + parser.getName()); break; case TEXT:// System.out.println("碰到了文本標簽" +" " + parser.getText()); break; default: break; } event = parser.next(); } for (Student student2 : students) { System.out.println(student2); } }}

運行,結果如下: 這里寫圖片描述

xml解析就完成了


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 偏关县| 资兴市| 抚顺县| 特克斯县| 惠东县| 东方市| 无锡市| 山丹县| 图们市| 南通市| 株洲县| 砀山县| 咸丰县| 东乌珠穆沁旗| 瓮安县| 织金县| 沂源县| 章丘市| 阿拉善左旗| 抚远县| 南木林县| 北票市| 涞源县| 班玛县| 酉阳| 蒙城县| 定南县| 怀远县| 天柱县| 明光市| 肇东市| 北京市| 盐山县| 鱼台县| 乌兰察布市| 大丰市| 白河县| 白山市| 克什克腾旗| 广德县| 开封县|