用XML將機(jī)器內(nèi)碼轉(zhuǎn)換為人們?nèi)菀桌斫獾男畔?/h1>
互聯(lián)網(wǎng) 發(fā)布時(shí)間:2008-10-17 20:16:03 作者:佚名
我要評(píng)論
程序中通常會(huì)有一些錯(cuò)誤代碼或標(biāo)識(shí),為了程序中方便這些東西通常不會(huì)使用漢字,經(jīng)常在程序中用的是一些FileError或數(shù)字。還有就是在編碼中經(jīng)常使用的枚舉標(biāo)識(shí)對(duì)象的狀態(tài)。而通常這些信息會(huì)直接的或間接的現(xiàn)實(shí)給用戶,可用戶需要到的是容易理解的漢字描述。以前要么將這
程序中通常會(huì)有一些錯(cuò)誤代碼或標(biāo)識(shí),為了程序中方便這些東西通常不會(huì)使用漢字,經(jīng)常在程序中用的是一些FileError或數(shù)字。還有就是在編碼中經(jīng)常使用的枚舉標(biāo)識(shí)對(duì)象的狀態(tài)。而通常這些信息會(huì)直接的或間接的現(xiàn)實(shí)給用戶,可用戶需要到的是容易理解的漢字描述。以前要么將這些標(biāo)識(shí)和枚舉的轉(zhuǎn)換規(guī)則硬編碼到程序中,要么就直接提示給用戶。前者沒有很好的擴(kuò)展性,而后者則讓用戶一頭霧水?,F(xiàn)可以用流行的XML(配置文件)保存提示信息,然后用一個(gè)對(duì)象將機(jī)器中的內(nèi)碼轉(zhuǎn)換為人們?nèi)菀桌斫獾男畔ⅰ?
轉(zhuǎn)換對(duì)象如下:
/**////
///翻譯類,將內(nèi)部碼翻譯成容易理解的中文
///
///
///根據(jù)配置文件中的信息,將系統(tǒng)內(nèi)部碼(錯(cuò)誤碼、成功碼)翻譯成中文(或人容易理解的語言)。
///
publicstaticclassTranslation
...{
privatestaticSystem.IO.FileSystemWatcherwatcher;
privatestaticXmlDocumentcontent;
privatestaticstringconfigFile;
privatestaticobjectlocker=newobject();
/**////
///加載配置文件
///
///
publicstaticvoidConfigure(stringconfigFile)
...{
LoadFile(configFile);
if(watcher!=null)
...{
watcher.Dispose();
}
watcher=newFileSystemWatcher(Path.GetDirectoryName(configFile),Path.GetFileName(configFile));
watcher.Changed =newFileSystemEventHandler(watcher_Changed);
}
/**////
///加載默認(rèn)配置文件
///
publicstaticvoidConfigure()
...{
if(System.Web.HttpContext.Current!=null)
...{
Configure(System.Web.HttpContext.Current.Server.MapPath("~/translation.config"));
}
else
...{
Configure(System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase "\" "translation.config");
}
}
/**////
///加載文件內(nèi)容
///
///
privatestaticvoidLoadFile(stringconfigFile)
...{
lock(locker)
...{
XmlDocumentdoc=newXmlDocument();
doc.Load(configFile);
content=doc;
Translation.configFile=configFile;
}
}
/**////
///當(dāng)文件變更時(shí),從新加載文件
///
///
///
privatestaticvoidwatcher_Changed(objectsender,FileSystemEventArgse)
...{
LoadFile(configFile);
}
/**////
///獲取Enum的解釋,如果Enum有Flag標(biāo)記,則使用逗號(hào)分隔各個(gè)解釋
///
///
///
publicstaticstringGetEnumDescription(EnumenumValue)
...{
returnGetEnumDescription(enumValue,",");
}
/**////
///獲取Enum的解釋,如果Enum有Flag標(biāo)記,則使用sparator分隔各個(gè)解釋
///
///
///
///
publicstaticstringGetEnumDescription(EnumenumValue,stringsparator)
...{
Typetype=enumValue.GetType();
//檢查類型是否有Flags特性
object[]attrs=type.GetCustomAttributes(typeof(FlagsAttribute),false);
if(attrs.Length>0)
...{
StringBuilderbuilder=newStringBuilder();
Arrayarr=Enum.GetValues(type);
foreach(Enumenuinarr)//循環(huán)獲取每一個(gè)值的解釋
...{
if((Convert.ToUInt64(enumValue)&Convert.ToUInt64(enu))==Convert.ToUInt64(enu))//判斷是否有這個(gè)值
...{
builder.Append(GetEnumDes(type,enu.ToString()));
builder.Append(sparator);
}
}
if(builder.Length!=0)//拿掉最后的分隔符
builder.Remove(builder.Length-sparator.Length,sparator.Length);
returnbuilder.ToString();
}
else
...{
returnGetEnumDes(type,enumValue.ToString());
}
}
/**////
///獲取某一Enum類型值的解釋
///
///
///
///
privatestaticstringGetEnumDes(Typetype,stringvalue)
...{
stringxquery="/translation/enum/" type.FullName "/" value;
XmlNodenode=content.SelectSingleNode(xquery);
if(node!=null)
returnnode.InnerText;
else
returnvalue;
}
/**////
///翻譯指定值
///
///
///
publicstaticstringGetValueDescription(objectobj)
...{
returnGetValueDescription("default",obj);
}
/**////
///在指定組中翻譯指定值
///
///
///
///
publicstaticstringGetValueDescription(stringgroup,objectobj)
...{
if(obj==null)
return"null";
stringxquery="/translation/description[@group='" group "']/add[@key='" obj.ToString() "']/@value";
XmlNodenode=content.SelectSingleNode(xquery);
if(node==null)
returnobj.ToString();
else
returnnode.Value;
}
}
相關(guān)文章
MIME類型中application/xml與text/xml的區(qū)別介紹
這篇文章介紹了MIME類型中application/xml與text/xml的區(qū)別,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧 2021-12-28 -
XML中擁有Schema特性,能夠比DTD更加強(qiáng)大地引入元素結(jié)構(gòu),下面我們就來詳解XML中的模式Schema的概念及作用和用法,需要的朋友可以參考下 2021-11-30
-
這篇文章主要介紹了XML基本概念入門學(xué)習(xí)指南,包括其與HTML的關(guān)系以及元素和特殊標(biāo)簽等,需要的朋友可以參考下 2016-06-24
-
XML標(biāo)簽的自定義功能非常強(qiáng)大,比如本文將要講解的DTD(Document Type Definition)就帶給人們一種面向?qū)ο蟀愕母杏X,well,下面就來看一下XML中的DTD文件類型定義完全解析 2016-06-24
-
這篇文章主要介紹了XML文件的閱讀與編輯,最常用的工具當(dāng)然還是瀏覽器中的控制臺(tái)與源代碼查看,需要的朋友可以參考下 2016-02-16
-
這篇文章主要介紹了XML的命名空間,包括命名空間的聲明等XML入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下 2016-02-16
解析XML中的樹形結(jié)構(gòu)與DOM文檔對(duì)象模型
這篇文章主要介紹了XML中的樹形結(jié)構(gòu)與DOM文檔對(duì)象模型,文中舉了JavaScript解析DOM對(duì)象的例子,需要的朋友可以參考下 2016-02-15 -
這篇文章主要介紹了詳解XML編程中的模式定義XSD,講解了如何在XML文檔中聲明模式及定義類型等內(nèi)容,需要的朋友可以參考下 2016-02-15
-
這篇文章主要介紹了XML中的DTD文檔類型定義,是XML入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下 2016-02-15
-
這篇文章主要介紹了XML代碼編寫的編碼與驗(yàn)證問題,與HTML類似,XML文件的編碼也能在序言部分被指定,需要的朋友可以參考下 2016-02-15
最新評(píng)論

程序中通常會(huì)有一些錯(cuò)誤代碼或標(biāo)識(shí),為了程序中方便這些東西通常不會(huì)使用漢字,經(jīng)常在程序中用的是一些FileError或數(shù)字。還有就是在編碼中經(jīng)常使用的枚舉標(biāo)識(shí)對(duì)象的狀態(tài)。而通常這些信息會(huì)直接的或間接的現(xiàn)實(shí)給用戶,可用戶需要到的是容易理解的漢字描述。以前要么將這些標(biāo)識(shí)和枚舉的轉(zhuǎn)換規(guī)則硬編碼到程序中,要么就直接提示給用戶。前者沒有很好的擴(kuò)展性,而后者則讓用戶一頭霧水?,F(xiàn)可以用流行的XML(配置文件)保存提示信息,然后用一個(gè)對(duì)象將機(jī)器中的內(nèi)碼轉(zhuǎn)換為人們?nèi)菀桌斫獾男畔ⅰ?
轉(zhuǎn)換對(duì)象如下:
/**////
///翻譯類,將內(nèi)部碼翻譯成容易理解的中文
///
///
///根據(jù)配置文件中的信息,將系統(tǒng)內(nèi)部碼(錯(cuò)誤碼、成功碼)翻譯成中文(或人容易理解的語言)。
///
publicstaticclassTranslation
...{
privatestaticSystem.IO.FileSystemWatcherwatcher;
privatestaticXmlDocumentcontent;
privatestaticstringconfigFile;
privatestaticobjectlocker=newobject();
/**////
///加載配置文件
///
///
publicstaticvoidConfigure(stringconfigFile)
...{
LoadFile(configFile);
if(watcher!=null)
...{
watcher.Dispose();
}
watcher=newFileSystemWatcher(Path.GetDirectoryName(configFile),Path.GetFileName(configFile));
watcher.Changed =newFileSystemEventHandler(watcher_Changed);
}
/**////
///加載默認(rèn)配置文件
///
publicstaticvoidConfigure()
...{
if(System.Web.HttpContext.Current!=null)
...{
Configure(System.Web.HttpContext.Current.Server.MapPath("~/translation.config"));
}
else
...{
Configure(System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase "\" "translation.config");
}
}
/**////
///加載文件內(nèi)容
///
///
privatestaticvoidLoadFile(stringconfigFile)
...{
lock(locker)
...{
XmlDocumentdoc=newXmlDocument();
doc.Load(configFile);
content=doc;
Translation.configFile=configFile;
}
}
/**////
///當(dāng)文件變更時(shí),從新加載文件
///
///
///
privatestaticvoidwatcher_Changed(objectsender,FileSystemEventArgse)
...{
LoadFile(configFile);
}
/**////
///獲取Enum的解釋,如果Enum有Flag標(biāo)記,則使用逗號(hào)分隔各個(gè)解釋
///
///
///
publicstaticstringGetEnumDescription(EnumenumValue)
...{
returnGetEnumDescription(enumValue,",");
}
/**////
///獲取Enum的解釋,如果Enum有Flag標(biāo)記,則使用sparator分隔各個(gè)解釋
///
///
///
///
publicstaticstringGetEnumDescription(EnumenumValue,stringsparator)
...{
Typetype=enumValue.GetType();
//檢查類型是否有Flags特性
object[]attrs=type.GetCustomAttributes(typeof(FlagsAttribute),false);
if(attrs.Length>0)
...{
StringBuilderbuilder=newStringBuilder();
Arrayarr=Enum.GetValues(type);
foreach(Enumenuinarr)//循環(huán)獲取每一個(gè)值的解釋
...{
if((Convert.ToUInt64(enumValue)&Convert.ToUInt64(enu))==Convert.ToUInt64(enu))//判斷是否有這個(gè)值
...{
builder.Append(GetEnumDes(type,enu.ToString()));
builder.Append(sparator);
}
}
if(builder.Length!=0)//拿掉最后的分隔符
builder.Remove(builder.Length-sparator.Length,sparator.Length);
returnbuilder.ToString();
}
else
...{
returnGetEnumDes(type,enumValue.ToString());
}
}
/**////
///獲取某一Enum類型值的解釋
///
///
///
///
privatestaticstringGetEnumDes(Typetype,stringvalue)
...{
stringxquery="/translation/enum/" type.FullName "/" value;
XmlNodenode=content.SelectSingleNode(xquery);
if(node!=null)
returnnode.InnerText;
else
returnvalue;
}
/**////
///翻譯指定值
///
///
///
publicstaticstringGetValueDescription(objectobj)
...{
returnGetValueDescription("default",obj);
}
/**////
///在指定組中翻譯指定值
///
///
///
///
publicstaticstringGetValueDescription(stringgroup,objectobj)
...{
if(obj==null)
return"null";
stringxquery="/translation/description[@group='" group "']/add[@key='" obj.ToString() "']/@value";
XmlNodenode=content.SelectSingleNode(xquery);
if(node==null)
returnobj.ToString();
else
returnnode.Value;
}
}
相關(guān)文章
MIME類型中application/xml與text/xml的區(qū)別介紹
這篇文章介紹了MIME類型中application/xml與text/xml的區(qū)別,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-12-28- XML中擁有Schema特性,能夠比DTD更加強(qiáng)大地引入元素結(jié)構(gòu),下面我們就來詳解XML中的模式Schema的概念及作用和用法,需要的朋友可以參考下2021-11-30
- 這篇文章主要介紹了XML基本概念入門學(xué)習(xí)指南,包括其與HTML的關(guān)系以及元素和特殊標(biāo)簽等,需要的朋友可以參考下2016-06-24
- XML標(biāo)簽的自定義功能非常強(qiáng)大,比如本文將要講解的DTD(Document Type Definition)就帶給人們一種面向?qū)ο蟀愕母杏X,well,下面就來看一下XML中的DTD文件類型定義完全解析2016-06-24
- 這篇文章主要介紹了XML文件的閱讀與編輯,最常用的工具當(dāng)然還是瀏覽器中的控制臺(tái)與源代碼查看,需要的朋友可以參考下2016-02-16
- 這篇文章主要介紹了XML的命名空間,包括命名空間的聲明等XML入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2016-02-16
解析XML中的樹形結(jié)構(gòu)與DOM文檔對(duì)象模型
這篇文章主要介紹了XML中的樹形結(jié)構(gòu)與DOM文檔對(duì)象模型,文中舉了JavaScript解析DOM對(duì)象的例子,需要的朋友可以參考下2016-02-15- 這篇文章主要介紹了詳解XML編程中的模式定義XSD,講解了如何在XML文檔中聲明模式及定義類型等內(nèi)容,需要的朋友可以參考下2016-02-15
- 這篇文章主要介紹了XML中的DTD文檔類型定義,是XML入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2016-02-15
- 這篇文章主要介紹了XML代碼編寫的編碼與驗(yàn)證問題,與HTML類似,XML文件的編碼也能在序言部分被指定,需要的朋友可以參考下2016-02-15