class ExchangeRate { private const string _BASEURL = "網頁地址"; public const string CURRENCYCODE = "貨幣類型以'|'隔開";//貨幣類型 public Hashtable GetValues() { Hashtable htReturn = new Hashtable(); string url = _BASEURL; //+ HttpUtility.UrlEncode(tmSet.ToString("yyyy/MM/dd", DateTimeFormatInfo.InvariantInfo)); WebClient wc = new WebClient(); string sHtml = wc.DownloadString(url); string sXml = string.Empty; int iValueCnt = CURRENCYCODE.Split(new char[] { '|' }, 10, StringSplitOptions.RemoveEmptyEntries).Length; string[] sTBody = sHtml.Split(new string[] { "<tbody>", "</tbody>" }, StringSplitOptions.RemoveEmptyEntries); foreach (string ss in sTBody) { if (ss.Contains("Currency Name")) { string[] sbrs = ss.Split(new string[] { "</tr>" }, StringSplitOptions.RemoveEmptyEntries); foreach (string sbr in sbrs) { string scur = string.Empty; double dRate = GetCurrencyRate(sbr, out scur); if (dRate != 0.0 && !string.IsNullOrEmpty(scur)) { htReturn.Add(scur, dRate * 0.01); if (htReturn.Count >= iValueCnt) break; } } break; } } return htReturn; } private double GetCurrencyRate(string source, out string sCurrency) { sCurrency = string.Empty; string sPattern = @"<td.+?>(.+?)</td>"; foreach (Match m in Regex.Matches(source, sPattern)) { string ss = m.Groups[1].Value; if (IsNumeric(ss)) return double.Parse(ss); else { if (CURRENCYCODE.Contains(ss)) sCurrency = ss.Trim(); else break; } } return 0.0; } public static bool IsNumeric(string str) { if (string.IsNullOrEmpty(str)) return false; System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex(@"^[-]?\d+[.|,]?\d*$"); return reg.IsMatch(str); } }