中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么使用XML將機器內碼轉換為人們能夠理解的信息

發布時間:2021-03-12 11:30:27 來源:億速云 閱讀:176 作者:小新 欄目:編程語言

小編給大家分享一下怎么使用XML將機器內碼轉換為人們能夠理解的信息,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

程序中通常會有一些錯誤代碼或標識,為了程序中方便這些東西通常不會使用漢字,經常在程序中用的是一些FileError或數字。還有就是在編碼中經常使用的枚舉標識對象的狀態。而通常這些信息會直接的或間接的現實給用戶,可用戶需要到的是容易理解的漢字描述。
  程序中通常會有一些錯誤代碼或標識,為了程序中方便這些東西通常不會使用漢字,經常在程序中用的是一些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特性 
  object[]attrs=type.GetCustomAttributes(typeof(FlagsAttribute),false); 
  if(attrs.Length>0) 
  ...{ 
  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) 
  return"null"; 
   
  stringxquery="/translation/description[@group='" group "']/add[@key='" obj.ToString() "']/@value"; 
  XmlNodenode=content.SelectSingleNode(xquery); 
  if(node==null) 
  returnobj.ToString(); 
  else 
  returnnode.Value; 
  } 
  }


        
        
        
        
                #p#

  在這個對象使用前需要使用Configure方法來加載xml配置文件,默認的配置文件名稱為translation.config。轉換對象使用單例模式,使用了一個FileSystemWatcher對象來監視XML文件,如果XML有變化,則從新加載。查詢XML使用了XPath表達式。
  然后即可使用GetEnumDescription和GetValueDescription方法來翻譯枚舉和標識了。如果沒有找到可以翻譯的值,則會返回對象的ToString方法的返回值。
  示例XML配置:

<?xmlversion="1.0"encoding="utf-8"?> 
<translation> 
<enum> 
<!--此出要用枚舉的全名--> 
<Library.UserType> 
<Unknow>未知</Unknow> 
<AfterPayUser>后付費用戶</AfterPayUser> 
<BeforePayUser>預付費用戶</BeforePayUser> 
</Library.UserType> 
</enum> 
<descriptiongroup="default"> 
<addkey="FileErrorl"value="文件已損壞"/> 
</description> 
<descriptiongroup="skin"> 
<addkey="Default"value="默認皮膚"/> 
</description> 
<descriptiongroup="topic"> 
<addkey="space"value="&lt;spanclass='red'&gt;您剩余的空間不足,請您刪除部分文件。&lt;/span&gt;&lt;br/&gt;"/> 
<addkey="yue"value="&lt;spanclass='red'&gt;您的余額不足,請盡快充值。&lt;/span&gt;&lt;br/&gt;"/> 
</description> 
</translation>

以上是“怎么使用XML將機器內碼轉換為人們能夠理解的信息”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

xml
AI

周至县| 鄂伦春自治旗| 海门市| 彭山县| 金华市| 镇巴县| 永济市| 繁峙县| 荥经县| 千阳县| 永泰县| 拜城县| 上思县| 财经| 鱼台县| 阿拉善右旗| 买车| 金寨县| 江北区| 贡山| 杨浦区| 九龙县| 广平县| 淮南市| 铅山县| 上犹县| 淮阳县| 安阳县| 九龙坡区| 揭东县| 河池市| 郓城县| 临沭县| 晋城| 麦盖提县| 洛川县| 崇阳县| 赤峰市| 镇坪县| 长葛市| 保山市|