亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区
Chinaunix
標題:
關(guān)于使用xml技術(shù)編寫通用報文配置程序的思路和思考,歡迎大家一
[打印本頁]
作者:
daidaoke
時間:
2002-11-04 14:38
標題:
關(guān)于使用xml技術(shù)編寫通用報文配置程序的思路和思考,歡迎大家一
我在寫一個通訊程序,報文這一塊我的想法是通過xml來進行管理,這樣可以方便的進行配置和修改。
這個想法的起因是我看到不少銀行中間業(yè)務平臺都能夠方便的進行通訊報文的修改和配置。我的這個雖然是個小程序,
但我也想實現(xiàn)這樣的功能,為將來的軟件發(fā)展提供一個較好的體系結(jié)構(gòu)。
最開始我的想法是這樣的:
對每一個報文定義類似下面的一個xml結(jié)構(gòu)
<Msg>;
<ID>;1</ID>;
<Type>;1</Type>;
<Name>;簽到交易</Name>;
<AnsMsgGrpID>;2</AnsMsgGrpID>;
<Direct>;0</Direct>;
<Fields>;
<Field>;
<ID>;1</ID>;
<Type>;1</Type>;
<DataType>;1</DataType>;
<Name>;續(xù)包標志</Name>;
<Len>;1</Len>;
</Field>;
<Field>;
<ID>;2</ID>;
<Type>;2</Type>;
<DataType>;1</DataType>;
<Name>;交易碼</Name>;
<Len>;4</Len>;
</Field>;
<Field>;
</Field>;
<Fields>;
</Msg>;
對應的,我在程序中定義結(jié)束報文配置信息的數(shù)據(jù)結(jié)構(gòu)如下:
struct typFld
{
intiID;//字段序號
intiType;//字段類型
intiDataType;//字段數(shù)據(jù)類型 1-字符型;2-網(wǎng)絡(luò)字節(jié)序
char*sFldNm;//字段名稱
intiLen;//字段的長度
}
struct typFlds
{
intiCnt;//報文中字段的數(shù)目
struct typFld *FldPtr;//在程序中動態(tài)分配空間
}
struct typMsg
{
intiMsgID;//報文ID
int iType;//報文類型
char *sMsgNm;//報文名稱
int iAnsMsgID;//回應報文的報文ID
int iDirect;//報文的方向,0--傳入;1--傳出
struct typFlds *FldsPtr;//指向存儲各字段的配置信息的存儲區(qū)域的指針
};
但是后來我發(fā)現(xiàn)報文中有一些特殊情況,采用上面的方式是不能處理的,如:
有一些報文段是需要循環(huán)的,具體循環(huán)的次數(shù)是在程序運行中才能知道的,比如說,用戶多個月的欠費明細就是這種情況。
還有,有一些報文段是可能有,可能沒有的,比如說:如果用戶有欠費,回應報文中就會有用戶各月的欠費明細,
如果用戶沒有欠費,回應報文就只返回一個錯誤碼,而沒有任何的欠費明細,這些情況可能會混合起來,我覺得就比較麻煩了,
我上網(wǎng)請教了一些朋友后,目前的思路是這樣的:
報文的xml結(jié)構(gòu)如下:
<Msg>;
<ID>;1</ID>;
<Type>;1</Type>;
<Name>;簽到交易</Name>;
<AnsMsgGrpID>;2</AnsMsgGrpID>;
<Direct>;0</Direct>;
<Fields>;
<Field>;
<ID>;1</ID>;
<Type>;1</Type>;
<DataType>;1</DataType>;
<Name>;續(xù)包標志</Name>;
<Len>;1</Len>;
</Field>;
<Field>;
<ID>;2</ID>;
<Type>;2</Type>;
<DataType>;1</DataType>;
<Name>;交易碼</Name>;
<Len>;4</Len>;
</Field>;
<While>;
<If>;一個條件表達式<If>;
<Loop>;
<iLpCnt>;iQianFeiMonth</iLpCnt>;
<Field>;
<ID>;3</ID>;
<Type>;2</Type>;
<DataType>;1</DataType>;
<Name>;欠費明細</Name>;
<Len>;10</Len>;
</Field>;
</Loop>;
</While>;
<Field>;
</Field>;
<Fields>;
</Msg>;
因為Fields節(jié)點中現(xiàn)在有不同的節(jié)點了:Field,While,Loop,有些朋友的意見是在Field節(jié)點中使用鏈表的形式。
我考慮了一下,覺得鏈表的編程太繁瑣,還是希望使用數(shù)組的形式。編程簡單。
對應的程序中的結(jié)構(gòu)修改如下:
struct typFld
{
intiType;//0-報文字段1-循環(huán)開始2-循環(huán)結(jié)束3-條件開始4-條件結(jié)束
char*sLpCnt;//循環(huán)次數(shù)表達式
char *sWhile;//條件表達式
intiID;//字段序號
intiFldType;//字段類型
intiDataType;//字段數(shù)據(jù)類型 1-字符型;2-網(wǎng)絡(luò)字節(jié)序
char*sFldNm;//字段名稱
intiLen;//字段的長度
}
這樣定義一個統(tǒng)一的大的結(jié)構(gòu)
當在程序中使用的時候,比如說,根據(jù)定義的報文結(jié)構(gòu)讀取一個報文時,
如果讀到一個"Field"節(jié)點,就根據(jù)這個節(jié)點的屬性讀取相應長度的字段;
如果讀到一個"While"節(jié)點,就轉(zhuǎn)化<if>;子節(jié)點中的條件表達式,如果表達式為真,就讀取while中的其他子節(jié)點,如果為假,就跳到<While>;節(jié)點的下一個兄弟節(jié)點;
如果讀到一個"Loop"節(jié)點,就根據(jù)<iLpCnt>;節(jié)點中的表達式的值重復讀取<Loop>;中的其他子節(jié)點。
我這樣的想法如何?有什么不對或者不妥的地方嗎?歡迎大家討論。
我使用的開發(fā)環(huán)境是sco unix +c +lib2xml
兄弟節(jié)點和子節(jié)點的查找,遍歷方法lib2xml提供了,所以我就不用在結(jié)構(gòu)中定義了
謝謝!
作者:
daidaoke
時間:
2002-11-04 16:13
標題:
關(guān)于使用xml技術(shù)編寫通用報文配置程序的思路和思考,歡迎大家一
up
作者:
samhoo
時間:
2002-11-04 16:40
標題:
關(guān)于使用xml技術(shù)編寫通用報文配置程序的思路和思考,歡迎大家一
你的問題是“xml本地化問題”:即“如何把結(jié)構(gòu)不確定的xml報文導入本地編程語言(如c語言)的結(jié)構(gòu)以便進行操縱”。
解決這一問題的過程包含了兩個步驟:
1)把xml文檔映射到便于訪問內(nèi)存結(jié)構(gòu)中,這一層次一般由xml開發(fā)庫提供,與用戶應用無關(guān),用戶程序可以通過該結(jié)構(gòu)及其操縱函數(shù),遍歷/操縱xml文檔,這一層次一般無需用戶程序干預,只需要簡單的指定xml文檔即可完成:(在libxml2中, http://xmlsoft.org)
xmlDocPtr doc;
doc = xmlParseFile(filename);
接下來即可對doc指針進行操縱。
2)遍歷上述doc指針,取得應用所需的信息,填寫應用相關(guān)結(jié)構(gòu)。
沒有<if>;, <Loop>;的xml報文已經(jīng)充分的表達了結(jié)構(gòu)的信息(沒有某個節(jié)點也是信息),你在遍歷該xml報文的時候完全可以獲得這些信息,并在第2)步填寫正確的應用結(jié)構(gòu),而無需添加多余的控制節(jié)點,增加程序的復雜度,而且難以閱讀(尤其在調(diào)試的時候)。
ps:你用的lib2xml庫是...(homepage?)
作者:
daidaoke
時間:
2002-11-04 18:19
標題:
關(guān)于使用xml技術(shù)編寫通用報文配置程序的思路和思考,歡迎大家一
我用得lib2xml就是從http://xmlsoft.org下載的
xmlDocPtr doc;
doc = xmlParseFile(filename);
這兩句我都是使用了的,看了你的話,我覺得應該是我對lib2xml的使用還沒有理解透徹,
再看看提供的函數(shù)吧,回頭再向你請教
非常感謝!
作者:
billik
時間:
2002-12-06 22:56
標題:
關(guān)于使用xml技術(shù)編寫通用報文配置程序的思路和思考,歡迎大家一
如果用了xml,是不是就可以將解析報文的任務交給了xml,不用自己打包解包?
作者:
daidaoke
時間:
2002-12-12 22:18
標題:
關(guān)于使用xml技術(shù)編寫通用報文配置程序的思路和思考,歡迎大家一
我的想法不是這樣的,
我的想法是:使用XML來定義報文的結(jié)構(gòu),如一個報文有幾個字段,每一個字段的長度,等等這些信息
這樣的話,就可以寫一個通用的打包解包模塊,來接收和發(fā)送報文,
如果將來報文結(jié)構(gòu)發(fā)生變化了,就可以只修改XML配置文件的信息,而不用修改打包解包的程序了。
我之前的疑問是如何來定義這個XML配置文件的格式,也就是說如何來表示一個報文的結(jié)構(gòu),最近具體作了一個這樣的程序,但是還沒作完,有一些收獲,也發(fā)現(xiàn)了一些不足的地方和新的問題,準備過一段時間后總結(jié)一下,再來與朋友們討論,
歡迎billik來參加討論
作者:
anders
時間:
2002-12-13 10:31
標題:
關(guān)于使用xml技術(shù)編寫通用報文配置程序的思路和思考,歡迎大家一
關(guān)于xml本身,只要定義好自己的dtd或xsd,其余可以用解析器完成語法及內(nèi)容解析(用dom或sax都可以,各有優(yōu)缺點),用不著自己完成,但對內(nèi)容本身的操作代碼,你要自己寫。
作者:
nile
時間:
2002-12-13 11:56
標題:
關(guān)于使用xml技術(shù)編寫通用報文配置程序的思路和思考,歡迎大家一
目前的 XML parsers 不需要 DTD 之類的。 事實上 DTD也不是XML格式,需要專門的parser去分析。 (XML Schema 是 XML 格式, 但很復雜, 實用中的XML parsers 也都不會去分析它)。
建議參考 soap或者 xml 應用在加密解密傳輸方面的資料。
作者:
anders
時間:
2002-12-13 12:12
標題:
關(guān)于使用xml技術(shù)編寫通用報文配置程序的思路和思考,歡迎大家一
定義dtd、schema不難啊,有專門的工具可以減輕你的工作比如xmlspy等,解析器大都認識dtd、schema,其碼我用的都可以,或者你可以網(wǎng)上搜索一下,有現(xiàn)成的軟件可用
作者:
jipf
時間:
2003-01-13 12:30
標題:
關(guān)于使用xml技術(shù)編寫通用報文配置程序的思路和思考,歡迎大家一
我覺的看一看radius服務器和客戶端的實現(xiàn)過程會有很大幫助。
作者:
jsjk
時間:
2007-09-13 11:04
雖然過了很長時間,小弟看到了還是要頂下
這位大蝦謝了!
作者:
rghliub
時間:
2010-04-26 11:09
回復
1#
daidaoke
作者:
雨過白鷺洲
時間:
2010-09-28 17:14
不知道這位兄弟有沒有把這個庫實現(xiàn)出來呢。。
作者:
meiyuhan
時間:
2013-01-15 10:04
不知該說些什么。。。。。。就是謝謝
歡迎光臨 Chinaunix (http://72891.cn/)
Powered by Discuz! X3.2