<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 嵌入式環(huán)境下Web Service技術(shù)的實(shí)現

嵌入式環(huán)境下Web Service技術(shù)的實(shí)現

作者: 時(shí)間:2012-03-21 來(lái)源:網(wǎng)絡(luò ) 收藏

2.2.2 XML解析
SOAP消息是由XML語(yǔ)言組成的,因此對XML的解析是處理SOAP消息的一個(gè)重點(diǎn)。當今有2種流行的XML解析API,它們是DOM(Document Obj ect Model)和SAX(Simple API for XML),盡管這兩種方法都能用來(lái)解析XML數據,但相互間卻有很多本質(zhì)的不同:DOM一次性把整個(gè)XML文檔讀入內存并建立完整的樹(shù)結構,而SAX則基于事件驅動(dòng)模型,一次只讀取一個(gè)XML元素,每當遇到一個(gè)讀取事件時(shí)就會(huì )觸發(fā)一個(gè)事件處理器。兩種方法各有優(yōu)缺點(diǎn):DOM在處理單個(gè)元素之前必須把其他所有的元素都讀入內存建立樹(shù)結構,這既費時(shí)間又費內存,在這方面SAX的性能
更為優(yōu)異,但DOM一旦建立樹(shù)結構之后,就可以方便地處理文檔中的任意元素,因為整個(gè)XML結構都在內存里,而SAX則必須從頭逐個(gè)解析XML文檔每一個(gè)元素,直到需要的那個(gè)元素。
考慮到SOAP消息的解析是一次性的過(guò)程,不需要進(jìn)行元素的隨機訪(fǎng)問(wèn),而且下資源有限,為此采用SAX做為XML的解析方式。定義以下結構體用來(lái)存儲節點(diǎn)結構。
e.JPG
另外建立一個(gè)列表用來(lái)存儲XML文檔中聲明的命名空間,避免XML文檔里的元素名或屬性名相互之間可能會(huì )發(fā)生的語(yǔ)義沖突。在XML文檔的解析過(guò)程中,保留當前節點(diǎn)及其父節點(diǎn)的結構體,除此之外的節點(diǎn)在讀取完畢后立即釋放其占用的資源,必要時(shí)還可以關(guān)閉對節點(diǎn)屬性的解析,進(jìn)一步降低內存消耗。當遇到新的讀取事件時(shí)(節點(diǎn)開(kāi)始、節點(diǎn)結束、發(fā)現節點(diǎn)值),將此次事件的相關(guān)信息作為參數傳入回調函數,在回調函數中對節點(diǎn)信息進(jìn)行處理:
f.JPG
2.2.3 具體服務(wù)
為了方便查找服務(wù),程序里將所有支持的服務(wù)函數的名稱(chēng)以及對應的命名空間預先保存在一個(gè)列表中。當進(jìn)入XML解析的回調函數后,根據XML節點(diǎn)的節點(diǎn)名稱(chēng)以及命名空間,首先試圖從列表中搜索本次SOAP消息所請求的服務(wù),如果所請求的服務(wù)函數存在,則將XML節點(diǎn)信息傳入該服務(wù)函數對應的初始化函數,完成對服務(wù)函數的參數列表的初始化,為之后的服務(wù)函數執行做好準備。圖3給出了該過(guò)程的程序框圖。XML解析完畢后退出XML解析器,此時(shí)服務(wù)函數也已經(jīng)完成初始化,直接調用服務(wù)函數的執行部分,并將結果打包成SOAP格式發(fā)送回客戶(hù)端。鑒于動(dòng)態(tài)生成XML文檔需要耗費較多的資源,程序中為每個(gè)服務(wù)函數預存了一個(gè)模板,模板中已經(jīng)定義好了回復消息的整體結構,僅需在服務(wù)函數被實(shí)際調用后往模板中填入結果即可,另外可以在發(fā)送回復消息的過(guò)程中復用之前的接收緩沖區,這樣一來(lái)同時(shí)節省了處理時(shí)間和資源消耗。

本文引用地址:http://dyxdggzs.com/article/149382.htm

g.JPG

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)

c++相關(guān)文章:c++教程




評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>