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

  免費注冊 查看新帖 |

Chinaunix

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

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

論壇徽章:
0
跳轉到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2002-11-04 14:38 |只看該作者 |倒序瀏覽
我在寫一個通訊程序,報文這一塊我的想法是通過xml來進行管理,這樣可以方便的進行配置和修改。
這個想法的起因是我看到不少銀行中間業(yè)務平臺都能夠方便的進行通訊報文的修改和配置。我的這個雖然是個小程序,
但我也想實現這樣的功能,為將來的軟件發(fā)展提供一個較好的體系結構。
最開始我的想法是這樣的:
對每一個報文定義類似下面的一個xml結構
<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>;

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

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

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

但是后來我發(fā)現報文中有一些特殊情況,采用上面的方式是不能處理的,如:
有一些報文段是需要循環(huán)的,具體循環(huán)的次數是在程序運行中才能知道的,比如說,用戶多個月的欠費明細就是這種情況。
還有,有一些報文段是可能有,可能沒有的,比如說:如果用戶有欠費,回應報文中就會有用戶各月的欠費明細,
如果用戶沒有欠費,回應報文就只返回一個錯誤碼,而沒有任何的欠費明細,這些情況可能會混合起來,我覺得就比較麻煩了,
我上網請教了一些朋友后,目前的思路是這樣的:
報文的xml結構如下:
<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é)點中現在有不同的節(jié)點了:Field,While,Loop,有些朋友的意見是在Field節(jié)點中使用鏈表的形式。
我考慮了一下,覺得鏈表的編程太繁瑣,還是希望使用數組的形式。編程簡單。
對應的程序中的結構修改如下:
struct typFld
{
intiType&#59;//0-報文字段1-循環(huán)開始2-循環(huán)結束3-條件開始4-條件結束
char*sLpCnt&#59;//循環(huán)次數表達式
char *sWhile&#59;//條件表達式

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

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

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

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

關于使用xml技術編寫通用報文配置程序的思路和思考,歡迎大家一

up

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

關于使用xml技術編寫通用報文配置程序的思路和思考,歡迎大家一

你的問題是“xml本地化問題”:即“如何把結構不確定的xml報文導入本地編程語言(如c語言)的結構以便進行操縱”。

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

2)遍歷上述doc指針,取得應用所需的信息,填寫應用相關結構。

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

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

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

關于使用xml技術編寫通用報文配置程序的思路和思考,歡迎大家一

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

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

關于使用xml技術編寫通用報文配置程序的思路和思考,歡迎大家一

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

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

關于使用xml技術編寫通用報文配置程序的思路和思考,歡迎大家一

我的想法不是這樣的,
我的想法是:使用XML來定義報文的結構,如一個報文有幾個字段,每一個字段的長度,等等這些信息
這樣的話,就可以寫一個通用的打包解包模塊,來接收和發(fā)送報文,
如果將來報文結構發(fā)生變化了,就可以只修改XML配置文件的信息,而不用修改打包解包的程序了。
我之前的疑問是如何來定義這個XML配置文件的格式,也就是說如何來表示一個報文的結構,最近具體作了一個這樣的程序,但是還沒作完,有一些收獲,也發(fā)現了一些不足的地方和新的問題,準備過一段時間后總結一下,再來與朋友們討論,
歡迎billik來參加討論

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

關于使用xml技術編寫通用報文配置程序的思路和思考,歡迎大家一

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

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

關于使用xml技術編寫通用報文配置程序的思路和思考,歡迎大家一

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

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

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

關于使用xml技術編寫通用報文配置程序的思路和思考,歡迎大家一

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

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

關于使用xml技術編寫通用報文配置程序的思路和思考,歡迎大家一

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

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

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP