欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

android的xml,android的xml編譯到指定位置

android里的XML文件是用什么寫的?

XML (eXtensible Markup Language)即可擴(kuò)展標(biāo)記語(yǔ)言,它與HTML一樣,都是SGML(Standard Generalized Markup Language,標(biāo)準(zhǔn)通用標(biāo)記語(yǔ)言)。Xml是Internet環(huán)境中跨平臺(tái)的,依賴于內(nèi)容的技術(shù),是當(dāng)前處理結(jié)構(gòu)化文檔信息的有力工具。擴(kuò)展標(biāo)記語(yǔ)言XML是一種簡(jiǎn)單的數(shù)據(jù)存儲(chǔ)語(yǔ)言,使用一系列簡(jiǎn)單的標(biāo)記描述數(shù)據(jù),而這些標(biāo)記可以用方便的方式建立,雖然XML占用的空間比二進(jìn)制數(shù)據(jù)要占用更多的空間,但XML極其簡(jiǎn)單易于掌握和使用。 XML與Access,Oracle和SQL Server等數(shù)據(jù)庫(kù)不同,數(shù)據(jù)庫(kù)提供了更強(qiáng)有力的數(shù)據(jù)存儲(chǔ)和分析能力,例如:數(shù)據(jù)索引、排序、查找、相關(guān)一致性等,XML僅僅是展示數(shù)據(jù)。事實(shí)上XML與其他數(shù)據(jù)表現(xiàn)形式最大的不同是:他極其簡(jiǎn)單。這是一個(gè)看上去有點(diǎn)瑣細(xì)的優(yōu)點(diǎn),但正是這點(diǎn)使XML與眾不同。 XML與HTML的設(shè)計(jì)區(qū)別是:XML是用來(lái)存儲(chǔ)數(shù)據(jù)的,重在數(shù)據(jù)本身。而HTML是用來(lái)定義數(shù)據(jù)的,重在數(shù)據(jù)的顯示模式。 XML的簡(jiǎn)單使其易于在任何應(yīng)用程序中讀寫數(shù)據(jù),這使XML很快成為數(shù)據(jù)交換的唯一公共語(yǔ)言,雖然不同的應(yīng)用軟件也支持其它的數(shù)據(jù)交換格式,但不久之后他們都將支持XML,那就意味著程序可以更容易的與Windows、Mac OS, Linux以及其他平臺(tái)下產(chǎn)生的信息結(jié)合,然后可以很容易加載XML數(shù)據(jù)到程序中并分析他,并以XML格式輸出結(jié)果。

成都創(chuàng)新互聯(lián)是一家專注于網(wǎng)站設(shè)計(jì)制作、網(wǎng)站設(shè)計(jì)與策劃設(shè)計(jì),德江網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十多年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:德江等地區(qū)。德江做網(wǎng)站價(jià)格咨詢:18980820575

android中XML文件是如何解析成View

簡(jiǎn)要概述

關(guān)于視圖的解析過程。大概原理就是通過Layout Inf later的inflate方法,將一個(gè)xml布局文檔用pull遞歸解析。然后判斷標(biāo)簽,如果是merge,include等特殊處理。如果是view或者view group,就通過xml的tag找到指定類,反射new出來(lái),然后add到parent。這里值得一提的是,為了抑制反射造成的效率損失,對(duì)反射出來(lái)的constructor做了一個(gè)map靜態(tài)緩存,下次遇到了同名tag就不用反射了另外,xml從文件中預(yù)編譯獲取xml parser的過程也很復(fù)雜,在AssetManager有大量緩存(比如相同id的layout只獲取一次,緩存xml block)與native方法,都是為了保證效率。

Android中LayoutInflate解析xml布局文件生成View樹的過程

Android XML布局與View之間的轉(zhuǎn)換

什么是xml,什么android的xml,android的xml文件有什么用?

xml 全名可擴(kuò)展標(biāo)記語(yǔ)言。和html文件差不多。

在android中經(jīng)常來(lái)編寫應(yīng)用的UI界面

列如:

在UI中就是這個(gè)樣子:

android里面怎么解析xml

Android解析xml文件總共有三種方法,分別是:

SAX解析XML文件:?SAX是一個(gè)解析速度快并且占用內(nèi)存少的xml解析器,非常適合用于Android等移動(dòng)設(shè)備。?SAX解析XML文件采用的是事件驅(qū)動(dòng),也就是說(shuō),它并不需要解析完整個(gè)文檔,在按內(nèi)容順序解析文檔的過程中,SAX會(huì)判斷當(dāng)前讀到的字符是否合法XML語(yǔ)法中的某部分,如果符合就會(huì)觸發(fā)事件。所謂事件,其實(shí)就是一些回調(diào)(callback)方法,這些方法(事件)定義在ContentHandler接口。如下代碼:

public?static?ListPerson?readXML(InputStream?inStream)?{

try?{

//創(chuàng)建解析器

SAXParserFactory?spf?=?SAXParserFactory.newInstance();

SAXParser?saxParser?=?spf.newSAXParser();

//設(shè)置解析器的相關(guān)特性,true表示開啟命名空間特性

saxParser.setProperty("",true);

XMLContentHandler?handler?=?new?XMLContentHandler();

saxParser.parse(inStream,?handler);

inStream.close();

return?handler.getPersons();

}?catch?(Exception?e)?{

e.printStackTrace();

}

return?null;

}

//SAX類:DefaultHandler,它實(shí)現(xiàn)了ContentHandler接口。在實(shí)現(xiàn)的時(shí)候,只需要繼承該類,重載相應(yīng)的方法即可。

public?class?XMLContentHandler?extends?DefaultHandler?{

private?ListPerson?persons?=?null;

private?Person?currentPerson;

private?String?tagName?=?null;//當(dāng)前解析的元素標(biāo)簽

public?ListPerson?getPersons()?{

return?persons;

}

//接收文檔開始的通知。當(dāng)遇到文檔的開頭的時(shí)候,調(diào)用這個(gè)方法,可以在其中做一些預(yù)處理的工作。

@Override

public?void?startDocument()?throws?SAXException?{

persons?=?new?ArrayListPerson();

}

//接收元素開始的通知。當(dāng)讀到一個(gè)開始標(biāo)簽的時(shí)候,會(huì)觸發(fā)這個(gè)方法。其中namespaceURI表示元素的命名空間;

//localName表示元素的本地名稱(不帶前綴);qName表示元素的限定名(帶前綴);atts?表示元素的屬性集合

@Override

public?void?startElement(String?namespaceURI,?String?localName,?String?qName,?Attributes?atts)?throws?SAXException?{

if(localName.equals("person")){

currentPerson?=?new?Person();

currentPerson.setId(Integer.parseInt(atts.getValue("id")));

}

this.tagName?=?localName;

}

//接收字符數(shù)據(jù)的通知。該方法用來(lái)處理在XML文件中讀到的內(nèi)容,第一個(gè)參數(shù)用于存放文件的內(nèi)容,

//后面兩個(gè)參數(shù)是讀到的字符串在這個(gè)數(shù)組中的起始位置和長(zhǎng)度,使用new?String(ch,start,length)就可以獲取內(nèi)容。

@Override

public?void?characters(char[]?ch,?int?start,?int?length)?throws?SAXException?{

if(tagName!=null){

String?data?=?new?String(ch,?start,?length);

if(tagName.equals("name")){

this.currentPerson.setName(data);

}else?if(tagName.equals("age")){

this.currentPerson.setAge(Short.parseShort(data));

}

}

}

//接收文檔的結(jié)尾的通知。在遇到結(jié)束標(biāo)簽的時(shí)候,調(diào)用這個(gè)方法。其中,uri表示元素的命名空間;

//localName表示元素的本地名稱(不帶前綴);name表示元素的限定名(帶前綴)

@Override

public?void?endElement(String?uri,?String?localName,?String?name)?throws?SAXException?{

if(localName.equals("person")){

persons.add(currentPerson);

currentPerson?=?null;

}

this.tagName?=?null;

}

}

DOM解析XML文件:? DOM解析XML文件時(shí),會(huì)將XML文件的所有內(nèi)容讀取到內(nèi)存中,然后允許您使用DOM API遍歷XML樹、檢索所需的數(shù)據(jù)。使用DOM操作XML的代碼看起來(lái)比較直觀,并且,在某些方面比基于SAX的實(shí)現(xiàn)更加簡(jiǎn)單。但是,因?yàn)镈OM需要將XML文件的所有內(nèi)容讀取到內(nèi)存中,所以內(nèi)存的消耗比較大,特別對(duì)于運(yùn)行Android的移動(dòng)設(shè)備來(lái)說(shuō),因?yàn)樵O(shè)備的資源比較寶貴,所以建議還是采用SAX來(lái)解析XML文件,當(dāng)然,如果XML文件的內(nèi)容比較小采用DOM是可行的。

Pull解析器解析XML文件:? ? Pull解析器的運(yùn)行方式與 SAX 解析器相似。它提供了類似的事件,如:開始元素和結(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類型元素的值

android中使用哪種方式解析XML比較好

PULL解析器,因?yàn)镾AX解析器操作起來(lái)太笨重,DOM不適合文檔較大,內(nèi)存較小的場(chǎng)景,唯有PULL輕巧靈活,速度快,占用內(nèi)存小,使用非常順手。

在Android中,常見的XML解析器分別為SAX解析器、DOM解析器和PULL解析器,下面一一詳細(xì)介紹。

1、SAX解析器:

SAX(Simple

API

for

XML)解析器是一種基于事件的解析器,它的核心是事件處理模式,主要是圍繞著事件源以及事件處理器來(lái)工作的。當(dāng)事件源產(chǎn)生事件后,調(diào)用事件處理器相應(yīng)的處理方法,一個(gè)事件就可以得到處理。在事件源調(diào)用事件處理器中特定方法的時(shí)候,還要傳遞給事件處理器相應(yīng)事件的狀態(tài)信息,這樣事件處理器才能夠根據(jù)提供的事件信息來(lái)決定自己的行為。

SAX解析器的優(yōu)點(diǎn)是解析速度快,占用內(nèi)存少。非常適合在Android移動(dòng)設(shè)備中使用。

2、DOM解析器:

DOM是基于樹形結(jié)構(gòu)的的節(jié)點(diǎn)或信息片段的集合,允許開發(fā)人員使用DOM

API遍歷XML樹、檢索所需數(shù)據(jù)。分析該結(jié)構(gòu)通常需要加載整個(gè)文檔和構(gòu)造樹形結(jié)構(gòu),然后才可以檢索和更新節(jié)點(diǎn)信息。

由于DOM在內(nèi)存中以樹形結(jié)構(gòu)存放,因此檢索和更新效率會(huì)更高。但是對(duì)于特別大的文檔,解析和加載整個(gè)文檔將會(huì)很耗資源。

3、PULL解析器:

PULL解析器的運(yùn)行方式和SAX類似,都是基于事件的模式。不同的是,在PULL解析過程中,我們需要自己獲取產(chǎn)生的事件然后做相應(yīng)的操作,而不像SAX那樣由處理器觸發(fā)一種事件的方法,執(zhí)行我們的代碼。PULL解析器小巧輕便,解析速度快,簡(jiǎn)單易用,非常適合在Android移動(dòng)設(shè)備中使用,Android系統(tǒng)內(nèi)部在解析各種XML時(shí)也是用PULL解析器。

android.XML文檔定義有幾種形式?它們之間有何本質(zhì)區(qū)別?解析XML文檔有哪幾種方式?

XML文檔定義分為DTD和Schema兩種形式,二者都是對(duì)XML語(yǔ)法的約束,其本質(zhì)區(qū)別在于Schema本身也是一個(gè)XML文件,可以被XML解析器解析,而且可以為XML承載的數(shù)據(jù)定義類型,約束能力較之DTD更強(qiáng)大。對(duì)XML的解析主要有DOM(文檔對(duì)象模型,Document Object Model)、SAX(Simple API for XML)和StAX(Java 6中引入的新的解析XML的方式,Streaming API for XML),其中DOM處理大型文件時(shí)其性能下降的非常厲害,這個(gè)問題是由DOM樹結(jié)構(gòu)占用的內(nèi)存較多造成的,而且DOM解析方式必須在解析文件之前把整個(gè)文檔裝入內(nèi)存,適合對(duì)XML的隨機(jī)訪問(典型的用空間換取時(shí)間的策略);SAX是事件驅(qū)動(dòng)型的XML解析方式,它順序讀取XML文件,不需要一次全部裝載整個(gè)文件。當(dāng)遇到像文件開頭,文檔結(jié)束,或者標(biāo)簽開頭與標(biāo)簽結(jié)束時(shí),它會(huì)觸發(fā)一個(gè)事件,用戶通過事件回調(diào)代碼來(lái)處理XML文件,適合對(duì)XML的順序訪問;顧名思義,StAX把重點(diǎn)放在流上,實(shí)際上StAX與其他解析方式的本質(zhì)區(qū)別就在于應(yīng)用程序能夠把XML作為一個(gè)事件流來(lái)處理。將XML作為一組事件來(lái)處理的想法并不新穎(SAX就是這樣做的),但不同之處在于StAX允許應(yīng)用程序代碼把這些事件逐個(gè)拉出來(lái),而不用提供在解析器方便時(shí)從解析器中接收事件的處理程序。

分享標(biāo)題:android的xml,android的xml編譯到指定位置
轉(zhuǎn)載來(lái)源:http://chinadenli.net/article10/dsdssgo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營(yíng)銷推廣App開發(fā)網(wǎng)站策劃小程序開發(fā)移動(dòng)網(wǎng)站建設(shè)外貿(mào)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁(yè)設(shè)計(jì)公司