亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標(biāo)題: 關(guān)于使用xml技術(shù)編寫(xiě)通用報(bào)文配置程序的思路和思考,歡迎大家一 [打印本頁(yè)]

作者: daidaoke    時(shí)間: 2002-11-04 14:38
標(biāo)題: 關(guān)于使用xml技術(shù)編寫(xiě)通用報(bào)文配置程序的思路和思考,歡迎大家一
我在寫(xiě)一個(gè)通訊程序,報(bào)文這一塊我的想法是通過(guò)xml來(lái)進(jìn)行管理,這樣可以方便的進(jìn)行配置和修改。
這個(gè)想法的起因是我看到不少銀行中間業(yè)務(wù)平臺(tái)都能夠方便的進(jìn)行通訊報(bào)文的修改和配置。我的這個(gè)雖然是個(gè)小程序,
但我也想實(shí)現(xiàn)這樣的功能,為將來(lái)的軟件發(fā)展提供一個(gè)較好的體系結(jié)構(gòu)。
最開(kāi)始我的想法是這樣的:
對(duì)每一個(gè)報(bào)文定義類(lèi)似下面的一個(gè)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ù)包標(biāo)志</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>;

對(duì)應(yīng)的,我在程序中定義結(jié)束報(bào)文配置信息的數(shù)據(jù)結(jié)構(gòu)如下:
struct typFld
{
intiID&#59;//字段序號(hào)
intiType&#59;//字段類(lèi)型
intiDataType&#59;//字段數(shù)據(jù)類(lèi)型 1-字符型;2-網(wǎng)絡(luò)字節(jié)序
char*sFldNm&#59;//字段名稱(chēng)
intiLen&#59;//字段的長(zhǎng)度
}

struct typFlds
{
intiCnt&#59;//報(bào)文中字段的數(shù)目
struct typFld *FldPtr&#59;//在程序中動(dòng)態(tài)分配空間
}

struct typMsg
{
intiMsgID&#59;//報(bào)文ID
int iType&#59;//報(bào)文類(lèi)型
char *sMsgNm&#59;//報(bào)文名稱(chēng)
int iAnsMsgID&#59;//回應(yīng)報(bào)文的報(bào)文ID
int iDirect&#59;//報(bào)文的方向,0--傳入&#59;1--傳出
struct typFlds *FldsPtr&#59;//指向存儲(chǔ)各字段的配置信息的存儲(chǔ)區(qū)域的指針
}&#59;

但是后來(lái)我發(fā)現(xiàn)報(bào)文中有一些特殊情況,采用上面的方式是不能處理的,如:
有一些報(bào)文段是需要循環(huán)的,具體循環(huán)的次數(shù)是在程序運(yùn)行中才能知道的,比如說(shuō),用戶(hù)多個(gè)月的欠費(fèi)明細(xì)就是這種情況。
還有,有一些報(bào)文段是可能有,可能沒(méi)有的,比如說(shuō):如果用戶(hù)有欠費(fèi),回應(yīng)報(bào)文中就會(huì)有用戶(hù)各月的欠費(fèi)明細(xì),
如果用戶(hù)沒(méi)有欠費(fèi),回應(yīng)報(bào)文就只返回一個(gè)錯(cuò)誤碼,而沒(méi)有任何的欠費(fèi)明細(xì),這些情況可能會(huì)混合起來(lái),我覺(jué)得就比較麻煩了,
我上網(wǎng)請(qǐng)教了一些朋友后,目前的思路是這樣的:
報(bào)文的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ù)包標(biāo)志</Name>;
<Len>;1</Len>;
</Field>;
<Field>;
<ID>;2</ID>;
<Type>;2</Type>;
<DataType>;1</DataType>;
<Name>;交易碼</Name>;
<Len>;4</Len>;
</Field>;
<While>;
<If>;一個(gè)條件表達(dá)式<If>;
<Loop>;
<iLpCnt>;iQianFeiMonth</iLpCnt>;
<Field>;
<ID>;3</ID>;
<Type>;2</Type>;
<DataType>;1</DataType>;
<Name>;欠費(fèi)明細(xì)</Name>;
<Len>;10</Len>;
</Field>;
</Loop>;
</While>;
<Field>;
</Field>;
<Fields>;
</Msg>;

因?yàn)镕ields節(jié)點(diǎn)中現(xiàn)在有不同的節(jié)點(diǎn)了:Field,While,Loop,有些朋友的意見(jiàn)是在Field節(jié)點(diǎn)中使用鏈表的形式。
我考慮了一下,覺(jué)得鏈表的編程太繁瑣,還是希望使用數(shù)組的形式。編程簡(jiǎn)單。
對(duì)應(yīng)的程序中的結(jié)構(gòu)修改如下:
struct typFld
{
intiType&#59;//0-報(bào)文字段1-循環(huán)開(kāi)始2-循環(huán)結(jié)束3-條件開(kāi)始4-條件結(jié)束
char*sLpCnt&#59;//循環(huán)次數(shù)表達(dá)式
char *sWhile&#59;//條件表達(dá)式

intiID&#59;//字段序號(hào)
intiFldType&#59;//字段類(lèi)型
intiDataType&#59;//字段數(shù)據(jù)類(lèi)型 1-字符型;2-網(wǎng)絡(luò)字節(jié)序
char*sFldNm&#59;//字段名稱(chēng)
intiLen&#59;//字段的長(zhǎng)度
}

這樣定義一個(gè)統(tǒng)一的大的結(jié)構(gòu)
當(dāng)在程序中使用的時(shí)候,比如說(shuō),根據(jù)定義的報(bào)文結(jié)構(gòu)讀取一個(gè)報(bào)文時(shí),
如果讀到一個(gè)&quot;Field&quot;節(jié)點(diǎn),就根據(jù)這個(gè)節(jié)點(diǎn)的屬性讀取相應(yīng)長(zhǎng)度的字段;
如果讀到一個(gè)&quot;While&quot;節(jié)點(diǎn),就轉(zhuǎn)化<if>;子節(jié)點(diǎn)中的條件表達(dá)式,如果表達(dá)式為真,就讀取while中的其他子節(jié)點(diǎn),如果為假,就跳到<While>;節(jié)點(diǎn)的下一個(gè)兄弟節(jié)點(diǎn)&#59;
如果讀到一個(gè)&quot;Loop&quot;節(jié)點(diǎn),就根據(jù)<iLpCnt>;節(jié)點(diǎn)中的表達(dá)式的值重復(fù)讀取<Loop>;中的其他子節(jié)點(diǎn)。

我這樣的想法如何?有什么不對(duì)或者不妥的地方嗎?歡迎大家討論。
我使用的開(kāi)發(fā)環(huán)境是sco unix +c +lib2xml
兄弟節(jié)點(diǎn)和子節(jié)點(diǎn)的查找,遍歷方法lib2xml提供了,所以我就不用在結(jié)構(gòu)中定義了
謝謝!
作者: daidaoke    時(shí)間: 2002-11-04 16:13
標(biāo)題: 關(guān)于使用xml技術(shù)編寫(xiě)通用報(bào)文配置程序的思路和思考,歡迎大家一
up
作者: samhoo    時(shí)間: 2002-11-04 16:40
標(biāo)題: 關(guān)于使用xml技術(shù)編寫(xiě)通用報(bào)文配置程序的思路和思考,歡迎大家一
你的問(wèn)題是“xml本地化問(wèn)題”:即“如何把結(jié)構(gòu)不確定的xml報(bào)文導(dǎo)入本地編程語(yǔ)言(如c語(yǔ)言)的結(jié)構(gòu)以便進(jìn)行操縱”。

解決這一問(wèn)題的過(guò)程包含了兩個(gè)步驟:
1)把xml文檔映射到便于訪問(wèn)內(nèi)存結(jié)構(gòu)中,這一層次一般由xml開(kāi)發(fā)庫(kù)提供,與用戶(hù)應(yīng)用無(wú)關(guān),用戶(hù)程序可以通過(guò)該結(jié)構(gòu)及其操縱函數(shù),遍歷/操縱xml文檔,這一層次一般無(wú)需用戶(hù)程序干預(yù),只需要簡(jiǎn)單的指定xml文檔即可完成:(在libxml2中, http://xmlsoft.org)
xmlDocPtr doc&#59;
doc = xmlParseFile(filename)&#59;
接下來(lái)即可對(duì)doc指針進(jìn)行操縱。

2)遍歷上述doc指針,取得應(yīng)用所需的信息,填寫(xiě)應(yīng)用相關(guān)結(jié)構(gòu)。

沒(méi)有<if>;, <Loop>;的xml報(bào)文已經(jīng)充分的表達(dá)了結(jié)構(gòu)的信息(沒(méi)有某個(gè)節(jié)點(diǎn)也是信息),你在遍歷該xml報(bào)文的時(shí)候完全可以獲得這些信息,并在第2)步填寫(xiě)正確的應(yīng)用結(jié)構(gòu),而無(wú)需添加多余的控制節(jié)點(diǎn),增加程序的復(fù)雜度,而且難以閱讀(尤其在調(diào)試的時(shí)候)。

ps:你用的lib2xml庫(kù)是...(homepage?)


作者: daidaoke    時(shí)間: 2002-11-04 18:19
標(biāo)題: 關(guān)于使用xml技術(shù)編寫(xiě)通用報(bào)文配置程序的思路和思考,歡迎大家一
我用得lib2xml就是從http://xmlsoft.org下載的
xmlDocPtr doc&#59;
doc = xmlParseFile(filename)&#59;
這兩句我都是使用了的,看了你的話,我覺(jué)得應(yīng)該是我對(duì)lib2xml的使用還沒(méi)有理解透徹,
再看看提供的函數(shù)吧,回頭再向你請(qǐng)教
非常感謝!

作者: billik    時(shí)間: 2002-12-06 22:56
標(biāo)題: 關(guān)于使用xml技術(shù)編寫(xiě)通用報(bào)文配置程序的思路和思考,歡迎大家一
如果用了xml,是不是就可以將解析報(bào)文的任務(wù)交給了xml,不用自己打包解包?
作者: daidaoke    時(shí)間: 2002-12-12 22:18
標(biāo)題: 關(guān)于使用xml技術(shù)編寫(xiě)通用報(bào)文配置程序的思路和思考,歡迎大家一
我的想法不是這樣的,
我的想法是:使用XML來(lái)定義報(bào)文的結(jié)構(gòu),如一個(gè)報(bào)文有幾個(gè)字段,每一個(gè)字段的長(zhǎng)度,等等這些信息
這樣的話,就可以寫(xiě)一個(gè)通用的打包解包模塊,來(lái)接收和發(fā)送報(bào)文,
如果將來(lái)報(bào)文結(jié)構(gòu)發(fā)生變化了,就可以只修改XML配置文件的信息,而不用修改打包解包的程序了。
我之前的疑問(wèn)是如何來(lái)定義這個(gè)XML配置文件的格式,也就是說(shuō)如何來(lái)表示一個(gè)報(bào)文的結(jié)構(gòu),最近具體作了一個(gè)這樣的程序,但是還沒(méi)作完,有一些收獲,也發(fā)現(xiàn)了一些不足的地方和新的問(wèn)題,準(zhǔn)備過(guò)一段時(shí)間后總結(jié)一下,再來(lái)與朋友們討論,
歡迎billik來(lái)參加討論
作者: anders    時(shí)間: 2002-12-13 10:31
標(biāo)題: 關(guān)于使用xml技術(shù)編寫(xiě)通用報(bào)文配置程序的思路和思考,歡迎大家一
關(guān)于xml本身,只要定義好自己的dtd或xsd,其余可以用解析器完成語(yǔ)法及內(nèi)容解析(用dom或sax都可以,各有優(yōu)缺點(diǎn)),用不著自己完成,但對(duì)內(nèi)容本身的操作代碼,你要自己寫(xiě)。
作者: nile    時(shí)間: 2002-12-13 11:56
標(biāo)題: 關(guān)于使用xml技術(shù)編寫(xiě)通用報(bào)文配置程序的思路和思考,歡迎大家一
目前的 XML parsers 不需要 DTD 之類(lèi)的。 事實(shí)上 DTD也不是XML格式,需要專(zhuān)門(mén)的parser去分析。 (XML Schema 是 XML 格式, 但很復(fù)雜, 實(shí)用中的XML parsers 也都不會(huì)去分析它)。

建議參考 soap或者 xml 應(yīng)用在加密解密傳輸方面的資料。
作者: anders    時(shí)間: 2002-12-13 12:12
標(biāo)題: 關(guān)于使用xml技術(shù)編寫(xiě)通用報(bào)文配置程序的思路和思考,歡迎大家一
定義dtd、schema不難啊,有專(zhuān)門(mén)的工具可以減輕你的工作比如xmlspy等,解析器大都認(rèn)識(shí)dtd、schema,其碼我用的都可以,或者你可以網(wǎng)上搜索一下,有現(xiàn)成的軟件可用
作者: jipf    時(shí)間: 2003-01-13 12:30
標(biāo)題: 關(guān)于使用xml技術(shù)編寫(xiě)通用報(bào)文配置程序的思路和思考,歡迎大家一
我覺(jué)的看一看radius服務(wù)器和客戶(hù)端的實(shí)現(xiàn)過(guò)程會(huì)有很大幫助。
作者: jsjk    時(shí)間: 2007-09-13 11:04
雖然過(guò)了很長(zhǎng)時(shí)間,小弟看到了還是要頂下
這位大蝦謝了!
作者: rghliub    時(shí)間: 2010-04-26 11:09
回復(fù) 1# daidaoke


   
作者: 雨過(guò)白鷺洲    時(shí)間: 2010-09-28 17:14
不知道這位兄弟有沒(méi)有把這個(gè)庫(kù)實(shí)現(xiàn)出來(lái)呢。。
作者: meiyuhan    時(shí)間: 2013-01-15 10:04
不知該說(shuō)些什么。。。。。。就是謝謝




歡迎光臨 Chinaunix (http://www.72891.cn/) Powered by Discuz! X3.2