<listing id="vjp15"></listing><menuitem id="vjp15"></menuitem><var id="vjp15"></var><cite id="vjp15"></cite>
<var id="vjp15"></var><cite id="vjp15"><video id="vjp15"><menuitem id="vjp15"></menuitem></video></cite>
<cite id="vjp15"></cite>
<var id="vjp15"><strike id="vjp15"><listing id="vjp15"></listing></strike></var>
<var id="vjp15"><strike id="vjp15"><listing id="vjp15"></listing></strike></var>
<menuitem id="vjp15"><strike id="vjp15"></strike></menuitem>
<cite id="vjp15"></cite>
<var id="vjp15"><strike id="vjp15"></strike></var>
<var id="vjp15"></var>
<var id="vjp15"></var>
<var id="vjp15"><video id="vjp15"><thead id="vjp15"></thead></video></var>
<menuitem id="vjp15"></menuitem><cite id="vjp15"><video id="vjp15"></video></cite>
<var id="vjp15"></var><cite id="vjp15"><video id="vjp15"><thead id="vjp15"></thead></video></cite>
<var id="vjp15"></var>
<var id="vjp15"></var>
<menuitem id="vjp15"><span id="vjp15"><thead id="vjp15"></thead></span></menuitem>
<cite id="vjp15"><video id="vjp15"></video></cite>
<menuitem id="vjp15"></menuitem>

Xml消息與c語言程序結構體轉換的方法及裝置的制作方法

文檔序號:6467761閱讀:709來源:國知局
專利名稱:Xml消息與c語言程序結構體轉換的方法及裝置的制作方法
技術領域
本發明涉及可擴展標記語言(XML, extensible Markup Language)消息處理技術, 特別是一種XML消息與C語言程序結構體轉換的方法及裝置。
背景技術
XML是軟件應用與web服務之間數據交換的一種常用標準,特別是在web編程中經 常使用XML消息作為消息通信接口。而C語言程序是軟件應用中常用的程序設計語言,自 然,在C語言程序實現的應用軟件中不能缺少XML消息的使用。 C語言程序與外部交互接口一般以字節流消息的形式對外交互,內部通常使用結 構體來表示外部信息。實際應用中,C語言程序與web程序之間交換信息,通常有兩種方式, 字節流方式和XML消息方式 字節流方式C語言程序處理起來較為容易,要考慮的因素比如字節序、跨平臺時 對結構體的填充等;但在恥b程序側則比較麻煩,通常還要封裝一層進行轉換;而且字節流 方式下的消息的表現能力較差,要對字節進行分析才能明白其含義; XML消息方式web程序比較擅長;由于XML消息實際上是字符串,這樣不存在字 節序問題和跨平臺問題,而且直接能從XML消息中看出各個字段的含義及取值,有利于對 消息通信接口的統一分析和測試。問題在于C語言程序對于XML消息的生成和解析比較麻 煩,而且XML消息的信息冗余相對較大。 現有技術中,通常由程序員來人工完成對于XML消息的生成和解析,當XML消息復 雜時,人工解析難免出現錯誤,而且效率不高。

發明內容
有鑒于此,本發明的主要目的在于提供一種XML消息與C語言程序結構體轉換的 方法及裝置,自動完成XML消息與C語言程序結構體的轉換,提高效率。
為達到上述目的,本發明的技術方案是這樣實現的
待拷貝權利要求 本發明根據用戶需求預先設置XML消息與C語言程序結構體格式之間的對應關 系,通訊時,自動完成XML消息的解析,并使得XML消息能直接映射到相應的C語言程序結 構體內存中,簡化轉換工作,從而使得C語言程序能更容易的使用XML消息與外部程序,特 別是web程序進行交互。另一方面,根據C語言程序結構體節點的信息,也能夠直接轉換為 對應的XML消息。當需要的XML消息格式改變時,更新XML消息與C語言程序結構體格式 之間的對應關系即可滿足新的需求,適應性強。


圖1為本發明XML消息與C語言程序結構體轉換的方法的流程圖;
圖2為本發明方法的一個實施例中的C語言程序結構體格式示意 圖3為本發明XML消息與C語言程序結構體轉換的裝置結構示意圖。
具體實施例方式
本發明通過預先設置XML消息與C語言程序結構體格式的對應關系,將XML消息 解析出的字段信息自動轉換為C語言程序能夠識別的結構體節點描述,或者將C語言程序 結構體節點信息轉換為XML消息;這種轉換自動完成,避免了人工轉換的各種錯誤,同時, 根據用戶需要可以增加XML消息與C語言程序結構體格式的對應關系。
下面通過具體的實施例及

本發明的技術方案。 本發明的方法流程如圖1所示,設置XML消息與C語言程序結構體格式的對應關 系,其中XML消息中的字段名稱、字段類型和各字段的值,映射為C語言程序結構體的節點 名稱、節點類型、節點偏移量和各節點之間的層次關系。該方法包括兩部分XML消息轉換 為C語言程序結構體,或C語言程序結構體轉換為XML消息。 步驟101 、接收并從XML消息中解析出字段信息和所述XML消息對應的C語言程序
結構體格式; 例如XML消息 〈? xml version =〃 1.0〃 encoding = 〃 UTF-8" >
〈sp id=〃 structname" >




















4
〈p
〈/sp>
〈sp id 〈p
〈p
〈/sp>
〈sp id 〈p
〈p
〈/sp>
〈/即>
〈/sp> 其中的〈p>〈/p>表示一個字段及其值,〈sp>〈/sp>表示是一個結構體,〈ap>〈/ap> 表示是一個數組。本發明只涉及到C語言程序與外界程序用XML消息交互的XML消息的解 析和生成。如果考慮到網絡程序的傳輸需要,比如TCP傳輸,在XML消息的前面還要加入一 些信息,如消息總長、消息類型等,以供C語言程序正確接收XML消息并處理。這些信息格 式及內容不在本發明范圍。在XML消息的預留位中設置XML消息對應的C語言程序結構體 格式的編號,這樣,通過這個編號,確定相應的C語言程序結構體格式。
各字段信息包括字段名稱、字段類型和字段的值,上例中的XML消息不能直接 被C語言程序識別,需要首先解析該XML消息對應的C語言程序結構體,進而分析XML消 息包含的字段信息,每個字段都有一個C語言程序結構體節點與之對應,如圖2所示,與 該XML消息對應的C語言程序結構體名稱為c_java_firstmsg_info_t,包括5個第一層 節點第一個節點名稱Int32Element,類型為整型(int),偏移量根據Int32Element的大 小及C_jaVa_firStmSg_inf0_t結構體內存開始地址起始位置計算得到;第二個節點名稱 為Int32ElementArray,類型為數組(Array),偏移量根據計算所得,該節點包含兩個下一 層節點,即c_java_firstmSg_inf0_t結構體的第二層節點名稱分別為1和2,類型均為 int ;c_java_firstmsg_info_t結構體的第一層第三個節點名稱為Int8ElementArray,類 型為字符串(string),字符串的最大長度為4(包括70'),偏移量根據計算所得;c_jaVa_ firstmsg_info_t結構體的第一層第四個節點名稱為StructElement,類型為結構體,包 括兩個第二層節點第一個節點名稱為Uint32Element,類型為int ;第二個節點名稱為 Uint8Element,類型為String,字符串最大長度為ll(包括'0/'),偏移量均通過計算得 到;c_java_firstmsg_info_t結構體的第一層第五個節點名稱為SturctElementArray,類 型為數組,包括兩個第二層節點第一個節點名稱為l,類型為結構體,該節點包含兩個第 三層節點第一個節點名稱為Int8Element,類型為數組,該數組包含兩個第四層節點,名 稱分別為1和2,類型均為int ;第二層節點結構體1的第二個節點名稱為Int32Element, 類型為字符串;SturctElementArray數組的第二個第二層節點名稱為2,類型為結構體,該 節點包含兩個第三層節點第一個節點名稱為Int8Element,類型為數組,該數組包含兩個 第四層節點,名稱分別為1和2,類型均為int ;第二層節點結構體2的第二個節點名稱為 Int32Element,類型為字符串;各層節點的偏移量的計算與C語言程序中通常偏移量計算
id = Int32Elementvalue =
=〃 3〃 >
id=〃 Int8Element〃 value ="
id =〃 Int32Element〃 value =
=〃 4 〃 >
id=〃 Int8Element〃 value ="
id =〃 Int32Element〃 value =方式相似,此不再贅述。 步驟102、根據所述字段信息和C語言程序結構體格式,建立相應的C語言程序結 構體。 與XML消息反應的字段信息對應的C語言程序結構體名稱為c_java_firstmSg_ info—t,具體為 typedef struct_tmp_struct_l_t { int Uint32Element ; char Uint8Element[11]; }tmp_struct_l_t ; typedef struct_tmp_struct_2_t { int Int8Element[2]; char Int32Element [5]; } tmp_struct_2_t ; typedef struct_c_java_firstmsg_info_t { int Int32Element ; int Int32ElementArray[2]; char Int8ElementArray [4]; tmp_struct_l_tStructElement ; tmp_struct_2_tSturctElementArray[2]; }c_java_firstmsg_info_t ; 該結構體中體現的層次關系為 typedef struct_xmlagt_st:ruct_info_t xmlagt_struct_info_t ; struct_xmlagt_struct_info_t
{ char_key[128] ;/*節點的名稱.*/ int_offset ;/*節點的起始地址,相對于結構體的開始地址.*/ int_type ;/*節點的類型*/ int_strLen ;/*只當節點是string(即char[])時有效,代表了字符串
長度, 包括了' \0' */ xmlagt_struct_info_t*_memberInfo ;/*此節點的下一級節點的信息
承/ int_memberNum ;/*此節點的下一級節點的數目*/ }; /*目前能處理四種數據類型int, char[] , array, struct. */ e皿m
info_t))
XMLAGT_TYPE_INT = 0, XMLAGT_TYPE_STRING = 1, XMLAGT_TYPE_ARRAY = 2, XMLAGT_TYPE_STRUCT = 3
static void clientRegFirstRequestMsg()
—firstmsg_info_t tmpMsg ;xmlagt_—struct_info—_t*tmpP ==NULL ;
xmlagt_—struct_info—_t*tmpPl=NULL
xmlagt_—struct_info—_t*tmpP2=NULL
xmlagt_—struct_info—_t*tmpP3=NULL
xmlagt_—struct_info—_t*tmpP4=NULL
這個結構體有5個節點.*/
tmpP = (xmlagt—struct—info—t氺)malloc(sizeof(xmlagt_struct_
:f(tmpP
NULL)
printf(〃 malloc tmpP fail ! \n〃 ); exit(l); memset (tmpP, 0x00, sizeof (xmlagt_struct_info_t)); tmpP->_type = XMLAGT_TYPE_STRUCT ; tmpP_>_offset = 0 ; tmpP_>_membe:rNum = 5 ; tmpP_>_memberInfo = (xmlagt—struct—info—t氺)malloc(5氺 sizeof(xmlagt_struct_info_t)); if (tmpP_>_memberInf o ==亂U { printf(" malloc fail ! \n〃 ); exit(l); } memset(tmpP_>_memberInfo, 0x00, 5氺sizeof(xmlagt_struct_info_t)); 根據所述字段信息和所述XML消息對應的C語言程序結構體格式,建立當前字段
對應的C語言程序結構體節點; /*第一個節點,名稱為Int32Element,類型為int,偏移量為計算所得*/ tmpPl = tmpP_>_memberInfo ; strcpy(tmpP1—>_key, 〃 Int32Element〃 );
7
tmpPl->_type = XMLAGT_TYPE_INT ; tmpPl_>_offset = (char*)&(tmpMsg. Int32Element)_(char*)&tmpMsg ;
分析當前字段是否包含下一層字段,如果是,建立當前字段的下一層字段對應的C 語言程序結構體節點;直至完成當前字段的第N層字段的C語言程序結構體節點建立;
第一個字段不含下一層字段,所以繼續建立C_java_firStmSg_inf0_t的第二個 節點; /*第二個節點,名稱為Int32ElementArray,類型為數組,偏移量為計算所得,這 個數組中又有兩個int元素*/ tmpPl = tmpP->_memberInfo+l ; strcpy(tmpPl_>_key, 〃 Int32ElementArray〃 ); tmpPl->_type = XMLAGT—TYPE—ARRAY ; tmpPl_>_offset = (char氺)(tmpMsg. Int32ElementArray)_(char *)&tmpMsg; tmpPl_>_memberNum = 2 ; tmpPl_>_memberInfo = (xmlagt—struct—info—t氺)malloc(2氺 sizeof(xmlagt_struct_info_t)); if (tmpPl_>_memberInfo == NULL) { printf(" malloc fail ! \n〃 ); exit(l); } memset(tmpPl_>_memberInfo, 0x00, 2氺sizeof(xmlagt_struct_info_ t)); tmpP2 = tmpPl-〉—memberlnfo ; strcpy(tmpP2->_key, 〃 1〃 ); tmpP2->_type = XMLAGT_TYPE_INT ; tmpP2_>_offset = (char*) (&(tmpMsg. Int32ElementArray
))_(char *)&tmpMsg; tmpP2 = tmpPl->_memberInfo+l ; strcpy(tmpP2->_key, 〃 2〃 ); tmpP2->_type = XMLAGT_TYPE_INT ; tmpP2_>_offset = (char*)(&(tmpMsg. Int32ElementArray[1]))_(char *)&tmpMsg; 第三個節點至第五個節點建立過程與前兩個節點類似,具體如下 /*第三個節點,名稱為Int8ElementArray,類型為string,這個string最大長度
為4(包括'\0'),其偏移量為計算所得*/ tmpPl = tmpP_>_memberInfo+2 ; strcpy(tmpPl_>_key, 〃 Int8ElementArray〃 ); tmpPl->_type = XMLAGT_TYPE_STRING ;0162] tmpPl_>_offset = (char氺)(tmpMsg. Int8ElementArray)_(char
0163] *)&tmpMsg;
0164] tmpPB—strLen = 4 ;
0165] /*第四個節點,名稱為StructElement,類型為結構體,偏移量為計算所得。這個 結構體中又有兩個節點,分別為int和string類型*/ 0166] tmpPl = tmpP_>_memberInfo+3 ; 0167] strcpy(tmpPl_>_key, 〃 St潔tElement〃 ); 0168] tmpPl->_type = XMLAGT_TYPE_STRUCT ;
tmpPl_>_offset = (char承)(&(tmpMsg. StructElement))_(char 氺)&tmpMsg ;
tmpPl_>_memberNum = 2 ;
tmpPl->_memberInfo = (xmlagt_struct_info_t*)malloc(2* sizeof(xmlagt_struct_info_t));
if (tmpPl_>_memberInfo == NULL)
0169] 0170] 0171] 0172] 0173] 0174] 0175] 0176] 0177] 0178] 0179] t)); 0180] 0181] 0182] 0183]
printf(" malloc fail ! \n〃 ); exit(l);
memset(tmpPl_>_memberInfo, 0x00, 2氺sizeof(xmlagt_struct_info_
tmpP2 = tmpPl_>_memberInfo ; strcpy(tmpP2_>_key, 〃 Uint32Element〃 ); tmpP2->_type = XMLAGT_TYPE_INT ;
tmpP2_>_offset = (char*) (&(tmpMsg. StructElement. Uint32Element))-0184] (char*)&tmpMsg ;
0185] tmpP2 = tmpPl->_memberInfo+l ;
0186] strcpy(tmpP2_>_key, 〃 Uint8Element〃 );
0187] tmpP2->_type = XMLAGT_TYPE_STRING ;
0188] tmpP2_>_offset = (char*) (tmpMsg. StructElement.
Uint8Element)_(char 0189] *)&tmpMsg; 0190] tmpP2_>_strLen = 11 ;
0191] /*第五個節點,名稱為SturctElementArray,類型為數組,其偏移量為計算所得c 這個數組中又有兩個結構體節點*/ 0192] tmpPl = tmpP_>_memberInfo+4 ;
0193] strcpy(tmpPl_>_key, 〃 SturctElementArray");
0194] tmpPl->_type = XMLAGT—TYPE—ARRAY ;
0195] tmpPl_>_offset = (char氺)(tmpMsg. SturctElementArray)_(char
*)&tmpMsg; tmpPl-〉—memberN咖=2 ; tmpPl_>_memberInfo = (xmlagt—struct—info—t氺)malloc(2氺 sizeof(xmlagt_struct_info_t)); if (tmpPl_>_memberInfo = = NULL) { printf(" mal loc fail ! \n〃 ); exit(l); } memset(tmpPl_>_memberInfo, 0x00, 2氺sizeof(xmlagt_struct_info— t)); tmpP2 = tmpPl-〉—memberlnfo ; strcpy(tmpP2->_key, 〃 1〃 ); tmpP2->_type = XMLAGT_TYPE_STRUCT ; tmpP2_>_offset = (char*)(&(tmpMsg. SturctElementArray
))_(char *)&tmpMsg; tmpP2_>_memberNum = 2 ; tmpP2_>_memberInfo = (xmlagt—struct—info—t氺)malloc(2* sizeof (xmlagt_struct_info_t)); if (tmpP2_>_memberInfo = = NULL) { printf(" mal loc fail ! \n〃 ); exit(l); } memset(tmpP2_>_memberInfo, 0x00, 2氺sizeof(xmlagt_struct_info— t)); tmpP3 = tmpP2_>_memberInfo ; strcpy(tmpP3->_key, 〃 Int8Element〃 ); tmpP3->_type = XMLAGT_TYPE_ARRAY ; tmpP3_>_offset = (char氺)(tmpMsg. SturctElementArray
.
Int8Element)_ (char *) &tmpMsg ; tmpP3_>_memberNum = 2 ; tmpP3_>_memberInfo = (xmlagt—struct—info—t氺)malloc(2* sizeof (xmlagt_struct_info_t)); if (tmpP3_>_memberInfo = = NULL) { printf(" mal loc fail ! \n〃 );:(〃u
} [6則 (Tl服==ojui j叫腦—〈-^加"[8則
:((3"oju廠:pru4s飛gBirax) j09Z]:s [z^20]
氺2) 301iT3ui(氺i—oju]:—lc)ru:is—igT3irax) = ojuiJ:9qra9ra—〈—2ddrai [9s20]
:2 =闊j叫腦—〈-2dd叫 [swo]
:Ss,m (* O,]
Sswduu)^(*JBHci) = :^3sjjo — 〈 — zdduu [s則
:丄3朋丄S—3d人丄—丄3VlWX = 3dAf 〈—2dd叫 [^20]
:(〃Z 〃 '一—〈-2d加"XctoJis [隨]
:T+ojuiJ叫腦—〈-Tdd叫=2d加l ,0]
:g = iraiJ^s—〈—gdd叫 [6剛
:Ss,m — ,0]
:3NIMS—3d人丄—丄3VlWX = 3dAf 〈—gd加i [91720]
:(j腦e孤giui 〃 '一—〈—ed加"Xdca^s [s剛
:T+ojuiJ叫腦—〈-2dd叫=Sd加l ,0]
gs,^ ci)_(([i],ra i .
XBj早腦3ig:p與s .3s,"影(* ,0]
= ^sjJo—〈—wd叫 [Z剛
:丄N廠3d入丄—丄3VlWX = 3cMf 〈—w加^ [lwo]
:(/,Z 〃 '一—〈-,d加"Xdca^s ,0]
:T+ojuiJ叫腦—〈-Sdd叫=,dd叫 [6,
:Ss,m (
_ ((
}腦 1 [o] XBj早腦3ig:p與s .ojuiSsra .Ss,"影(* [8,
:丄N廠3d入丄—丄3VlWX = 3(Mf 〈—w加^ [9s20]
:(/,1 /, '一—〈-,d加"Xdca^s [se20]
:ojuiJ叫腦—〈-gdd叫=,dd叫 [
:((fo與
{
M n/6
樂的說
memset(tmpP2_>_memberInfo, 0x00, 2氺sizeof(xmlagt_struct_info— t)); tmpP3 = tmpP2_>_memberInfo ; strcpy(tmpP3->_key, 〃 Int8Element〃 ); tmpP3->_type = XMLAGT_TYPE_ARRAY ; tmpP3_>_offset = (char氺)(tmpMsg. SturctElementArray[1].
Int8Element)_ (char*) &tmpMsg ; tmpP3_>_memberNum = 2 ; tmpP3_>_memberInfo = (xmlagt—struct—info—t氺)malloc(2* sizeof(xmlagt_struct_info_t)); if (tmpP3->_memberInfo = = NULL) { printf(" malloc fail ! \n〃 ); exit(l); } memset(tmpP3_>_memberInfo, 0x00, 2氺sizeof(xmlagt_struct_info— t)); tmpP4 = tmpP3_>_memberInfo ; strcpy(tmpP4_>_key, 〃 1〃 ); tmpP4->_type = XMLAGT_TYPE_INT ; tmpP4_>_off set = (char *)&(tmpMsg. SturctElementArray[1]. Int8Element
)_(char*)&tmpMsg ; tmpP4 = tmpP3->_memberInfo+l ; strcpy(tmpP4_>_key, 〃 2〃 ); tmpP4->_type = XMLAGT_TYPE_INT ; tmpP4_>_offset = (char *)&(tmpMsg. SturctElementArray[1]. Int8Element[1])_(char*)&tmpMsg ; tmpP3 = tmpP2_>_memberInfo+l ; strcpy(tmpP3->_key, 〃 Int32Element〃 ); tmpP3->_type = XMLAGT_TYPE_STRING ; tmpP3_>_offset = (char*)tmpMsg. SturctElementArray[1].
Int32Element_ (char*) &tmpMsg ; tmpP3_>_strLen = 5 ; /*記下這個結構體的層次樹,以結構體類型定義名稱" c_java_f irstmsg_info_t"為關鍵字*/ xmlagtRegStructlnfoToXml(〃 c_java_firstmsg_info_t〃 ,
sizeof (c_java_f irstmsg_info_t) , tmpP);
return ; } 可以看到,在建立這個層次關系時,對每個字段都有其名稱(與XML消息中相同)、 數據類型(如XMLAGT_TYPE_INT,XMLAGT_TYPE_STRING,XMLAGT_TYPE_ARRAY,XMLAGT_TYPE_ STRUCT)和相對于結構體內存開始地址的偏移,如果是數組類型或者結構體類型還要分配 下一層的節點;如果是字符串類型則要記下其最大長度以防溢出。然后,通過結構體的名稱 C_java_firStmSg_inf0_t,與各節點的層次關系建立起圖2所示的C語言程序能夠直接識 別的結構體。 j吏用時,i周用類4以ParseCall (char氺pBuf, int bufLen, void氺pStruct, intst潔tLen, const char*pStructTypeName)這樣的接口 ,其中pBuf是XML消息;bufLen 是XML消息的長度;pStruct,返回的對應此條XML消息的結構體的指針,對應到示例就是指 向一個c_java_firstmsg_info_t結構體;structLen,對應此條XML消息的結構體的size, 對應至Ll示例就是sizeof (c_java_f irstmsg_info_t) ;pSt潔tTypeName,對應此條XML消息 的結構體的類型名稱,對應到示例就是"c_java_firstmsg_info_t〃 。
在這個ParseCall()接口中就可以封裝某個C/C++xml庫(比如libxml2)的 函數,一級一級的解開,同時將各個字段的名字(如〈P id = 〃 Int32Element〃 value =〃 1〃 /〉,這個字段的名字是"Int32Element",其值為1)與結構體的層次樹中字段的名 稱對應起來,如果這個字段的類型不是數組類型或者結構體類型,將字段的值寫入這個字 段的偏移量;如果這個字段的類型是數組或者結構體,那么還要繼續向下解出下一層字段 的值。 以上是解析XML消息的處理過程,當需要從C語言程序結構體轉換為XML消息時, 采用步驟103 :根據C語言程序結構體和所述對應關系,建立與該C語言程序結構體對應的 XML消息。 生成XML消息的過程相對簡單,將XML消息的各字段視為字符串,根據C語言程序 結構體和該結構體與XML消息的對應關系,即取得C語言程序結構體的節點層次關系樹、每 個節點的數據類型、每個節點在內存中的位置,將結構體內存中的數據寫入XML消息各字 段,從而建立相應的XML消息。 本發明還提供了相應的XML消息與C語言程序結構體轉換的裝置,如圖3所示,該 裝置包括存儲模塊和執行模塊,其中, 存儲模塊用于存儲設置的XML消息與C語言程序結構體的對應關系; 執行模塊用于將XML消息轉換為相應的C語言程序結構體,或者,將C語言程序結
構體轉換為對應的XML消息。 所述執行模塊包括解析模塊、轉換模塊和封裝模塊,其中,
解析模塊用于接收并從XML消息中解析出字段信息; 轉換模塊用于根據解析的XML消息的字段信息和所述對應關系,建立相應的C語 言程序結構體; 封裝模塊用于根據C語言程序結構體和所述對應關系,建立相應的XML消息。
以上所述,僅為本發明的較佳實施例而已,并非用于限定本發明的保護范圍。
權利要求
一種XML消息與C語言程序結構體轉換的方法,其特征在于,設置XML消息與C語言程序結構體格式的對應關系,該方法包括A1、接收并從XML消息中解析出字段信息和所述XML消息對應的C語言程序結構體格式;根據所述字段信息和C語言程序結構體格式,建立相應的C語言程序結構體;或者,A2、根據C語言程序結構體和所述對應關系,建立與該C語言程序結構體對應的XML消息。
2. 根據權利要求1所述的XML消息與C語言程序結構體轉換的方法,其特征在于,根據 所述字段信息和C語言程序結構體格式,建立相應的C語言程序結構體具體包括All、根據所述字段信息和所述XML消息對應的C語言程序結構體格式,建立當前字段 對應的C語言程序結構體節點;A12、分析當前字段是否包含下一層字段,如果是,建立當前字段的下一層字段對應的C 語言程序結構體節點;直至完成當前字段的第N層字段的C語言程序結構體節點建立;A13、建立XML消息下一個字段對應的C語言程序結構體節點,直至完成XML消息所有 字段對應的C語言程序結構體節點建立。
3. 根據權利要求1所述的XML消息與C語言程序結構體轉換的方法,其特征在于,所述 XML消息與C語言程序結構體格式一一對應。
4. 根據權利要求1所述的XML消息與C語言程序結構體轉換的方法,其特征在于,所述 XML消息的字段類型或C語言程序結構體的節點類型包括整型、字符型、數組型或結構體。
5. —種XML消息與C語言程序結構體轉換的裝置,其特征在于,該裝置包括存儲模塊和 執行模塊,其中,存儲模塊用于存儲設置的XML消息與C語言程序結構體的對應關系; 執行模塊用于將XML消息轉換為相應的C語言程序結構體,或者,將C語言程序結構體 轉換為對應的XML消息。
6. 根據權利要求5所述的XML消息與C語言程序結構體轉換的裝置,其特征在于,所述 執行模塊包括解析模塊、轉換模塊和封裝模塊,其中,解析模塊用于接收并從XML消息中解析出字段信息;轉換模塊用于根據解析的XML消息的字段信息和所述對應關系,建立相應的C語言程 序結構體;封裝模塊用于根據C語言程序結構體和所述對應關系,建立相應的XML消息。
全文摘要
本發明公開了一種XML消息與C語言程序結構體轉換的方法,設置XML消息與C語言程序結構體格式的對應關系,該方法包括接收并從XML消息中解析出字段信息和所述XML消息對應的C語言程序結構體格式;根據所述字段信息和C語言程序結構體格式,建立相應的C語言程序結構體;或者,根據C語言程序結構體和所述對應關系,建立與該C語言程序結構體對應的XML消息。本發明還公開了相應裝置,包括存儲模塊和執行模塊。本發明能夠自動完成XML消息與C語言程序結構體的轉換,減少錯誤,提高效率。
文檔編號G06F9/44GK101739245SQ20081017368
公開日2010年6月16日 申請日期2008年11月7日 優先權日2008年11月7日
發明者楊軍, 王華馳, 閆京生, 黃治華 申請人:武漢虹信通信技術有限責任公司
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
韩国伦理电影