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

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
12下一頁
最近訪問板塊 發(fā)新帖
查看: 33596 | 回復(fù): 13
打印 上一主題 下一主題

關(guān)于使用xml技術(shù)編寫通用報文配置程序的思路和思考,歡迎大家一 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2002-11-04 14:38 |只看該作者 |倒序瀏覽
我在寫一個通訊程序,報文這一塊我的想法是通過xml來進(jìn)行管理,這樣可以方便的進(jìn)行配置和修改。
這個想法的起因是我看到不少銀行中間業(yè)務(wù)平臺都能夠方便的進(jìn)行通訊報文的修改和配置。我的這個雖然是個小程序,
但我也想實現(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ù)包標(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>;

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

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

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

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

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

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

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

我這樣的想法如何?有什么不對或者不妥的地方嗎?歡迎大家討論。
我使用的開發(fā)環(huán)境是sco unix +c +lib2xml
兄弟節(jié)點和子節(jié)點的查找,遍歷方法lib2xml提供了,所以我就不用在結(jié)構(gòu)中定義了
謝謝!

論壇徽章:
0
2 [報告]
發(fā)表于 2002-11-04 16:13 |只看該作者

關(guān)于使用xml技術(shù)編寫通用報文配置程序的思路和思考,歡迎大家一

up

論壇徽章:
0
3 [報告]
發(fā)表于 2002-11-04 16:40 |只看該作者

關(guān)于使用xml技術(shù)編寫通用報文配置程序的思路和思考,歡迎大家一

你的問題是“xml本地化問題”:即“如何把結(jié)構(gòu)不確定的xml報文導(dǎo)入本地編程語言(如c語言)的結(jié)構(gòu)以便進(jìn)行操縱”。

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

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

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

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

論壇徽章:
0
4 [報告]
發(fā)表于 2002-11-04 18:19 |只看該作者

關(guān)于使用xml技術(shù)編寫通用報文配置程序的思路和思考,歡迎大家一

我用得lib2xml就是從http://xmlsoft.org下載的
xmlDocPtr doc&#59;
doc = xmlParseFile(filename)&#59;
這兩句我都是使用了的,看了你的話,我覺得應(yīng)該是我對lib2xml的使用還沒有理解透徹,
再看看提供的函數(shù)吧,回頭再向你請教
非常感謝!

論壇徽章:
0
5 [報告]
發(fā)表于 2002-12-06 22:56 |只看該作者

關(guān)于使用xml技術(shù)編寫通用報文配置程序的思路和思考,歡迎大家一

如果用了xml,是不是就可以將解析報文的任務(wù)交給了xml,不用自己打包解包?

論壇徽章:
0
6 [報告]
發(fā)表于 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)了一些不足的地方和新的問題,準(zhǔn)備過一段時間后總結(jié)一下,再來與朋友們討論,
歡迎billik來參加討論

論壇徽章:
0
7 [報告]
發(fā)表于 2002-12-13 10:31 |只看該作者

關(guān)于使用xml技術(shù)編寫通用報文配置程序的思路和思考,歡迎大家一

關(guān)于xml本身,只要定義好自己的dtd或xsd,其余可以用解析器完成語法及內(nèi)容解析(用dom或sax都可以,各有優(yōu)缺點),用不著自己完成,但對內(nèi)容本身的操作代碼,你要自己寫。

論壇徽章:
0
8 [報告]
發(fā)表于 2002-12-13 11:56 |只看該作者

關(guān)于使用xml技術(shù)編寫通用報文配置程序的思路和思考,歡迎大家一

目前的 XML parsers 不需要 DTD 之類的。 事實上 DTD也不是XML格式,需要專門的parser去分析。 (XML Schema 是 XML 格式, 但很復(fù)雜, 實用中的XML parsers 也都不會去分析它)。

建議參考 soap或者 xml 應(yīng)用在加密解密傳輸方面的資料。

論壇徽章:
0
9 [報告]
發(fā)表于 2002-12-13 12:12 |只看該作者

關(guān)于使用xml技術(shù)編寫通用報文配置程序的思路和思考,歡迎大家一

定義dtd、schema不難啊,有專門的工具可以減輕你的工作比如xmlspy等,解析器大都認(rèn)識dtd、schema,其碼我用的都可以,或者你可以網(wǎng)上搜索一下,有現(xiàn)成的軟件可用

論壇徽章:
0
10 [報告]
發(fā)表于 2003-01-13 12:30 |只看該作者

關(guān)于使用xml技術(shù)編寫通用報文配置程序的思路和思考,歡迎大家一

我覺的看一看radius服務(wù)器和客戶端的實現(xiàn)過程會有很大幫助。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP