新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 嵌入式環境下Web Service技術的實現

        嵌入式環境下Web Service技術的實現

        作者: 時間:2012-03-21 來源:網絡 收藏

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

        本文引用地址:http://www.104case.com/article/149382.htm

        g.JPG

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

        c++相關文章:c++教程




        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 尉犁县| 闵行区| 康定县| 凤冈县| 沽源县| 肃北| 万载县| 水城县| 铜鼓县| 乌兰察布市| 银川市| 黄大仙区| 大理市| 临泉县| 乐都县| 泰州市| 察哈| 胶州市| 沙雅县| 禹城市| 南木林县| 南召县| 韩城市| 宁蒗| 彭泽县| 东源县| 无为县| 揭西县| 凤庆县| 麟游县| 岳池县| 镇安县| 巫溪县| 富源县| 龙门县| 博白县| 平阳县| 五台县| 三穗县| 潜江市| 邳州市|