DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> XML學習教程 >> XML詳解 >> 用XML將機器內碼轉換為人們容易理解的信息
用XML將機器內碼轉換為人們容易理解的信息
編輯:XML詳解     
前者沒有很好的擴展性,而後者則讓用戶一頭霧水。現可以用流行的XML(配置文件)保存提示信息,然後用一個對象將機器中的內碼轉換為人們容易理解的信息。

程序中通常會有一些錯誤代碼或標識,為了程序中方便這些東西通常不會使用漢字,經常在程序中用的是一些FileError或數字。還有就是在編碼中經常使用的枚舉標識對象的狀態。而通常這些信息會直接的或間接的現實給用戶,可用戶需要到的是容易理解的漢字描述。以前要麼將這些標識和枚舉的轉換規則硬編碼到程序中,要麼就直接提示給用戶。前者沒有很好的擴展性,而後者則讓用戶一頭霧水。現可以用流行的XML(配置文件)保存提示信息,然後用一個對象將機器中的內碼轉換為人們容易理解的信息。

轉換對象

/**////

///翻譯類,將內部碼翻譯成容易理解的中文

///

///

///根據配置文件中的信息,將系統內部碼(錯誤碼、成功碼)翻譯成中文(或人容易理解的語言)。

///

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);

}

/**////

///加載默認配置文件

///

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);

}

}

/**////

///加載文件內容

///

///

privatestaticvoidLoadFile(stringconfigFile)

...{

lock(locker)

...{

XmlDocumentdoc=newXMLDocument();

doc.Load(configFile);

content=doc;

Translation.configFile=configFile;

}

}

/**////

///當文件變更時,從新加載文件

///

///

///

privatestaticvoidwatcher_Changed(objectsender,FileSystemEventArgse)

...{

LoadFile(configFile);

}

/**////

///獲取Enum的解釋,如果Enum有Flag標記,則使用逗號分隔各個解釋

///

///

///

publicstaticstringGetEnumDescription(EnumenumValue)

...{

returnGetEnumDescription(enumValue,,);

}

/**////

///獲取Enum的解釋,如果Enum有Flag標記,則使用sparator分隔各個解釋

///

///

///

///

publicstaticstringGetEnumDescription(EnumenumValue,stringsparator)

...{

Typetype=enumValue.GetType();

//檢查類型是否有Flags特性

objectattrs=type.GetCustomAttributes(typeof(FlagsAttribute),false);

if(attrs.Length0)

...{

StringBuilderbuilder=newStringBuilder();

Arrayarr=Enum.GetValues(type);

foreach(Enumenuinarr)//循環獲取每一個值的解釋

...{

if((Convert.ToUInt64(enumValue)Convert.ToUInt64(enu))==Convert.ToUInt64(enu))//判斷是否有這個值

...{

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)

returnnull;

stringxquery=/translation/description[@group=‘+group+‘]/add[@key=‘+obj.ToString()+‘]/@value;

XMLNodenode=content.SelectSingleNode(xquery);

if(node==null)

returnobj.ToString();

else

returnnode.Value;

}

}

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved