65.9K
CodeProject 正在变化。 阅读更多。
Home

一个包含国家和地区列表的地址助手类

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.50/5 (2投票s)

2009年2月11日

CPOL

4分钟阅读

viewsIcon

24288

downloadIcon

206

此类和 XML 文件可用于实现任何基本地址构建器的“国家/地区”和“州”部分的下拉列表。

引言

在开发需要地址辅助类的应用程序时,我认为找到一些构建地址所需的必要数据(即,我们在许多网站上经常看到的国家/地区及其州列表)可能很容易。 当我发现从注册表中获取国家/地区列表的模块时,真是太酷了。 对我而言,作为 Windows 应用程序和 C# 的新手,剩下的唯一事情就是获取每个国家/地区的州列表并将其添加到代码中。

由于它在很多地方使用,我自动假设该文件会在附近,或者可能是一个数据库或其他什么东西,我可以用来将其与我的应用程序集成,但是嘿,我没有找到任何这样的文件或数据库。 现在,可能是我搜索的时间不够长,或者可能是我使用了错误的搜索字符串而错过了它,但无论如何,搜索结果为空。 但是,我确实找到了世界各国列表,以及它们下面的州列表,需要将它们放在一起。

所以基本上,这种需求,加上拥有这样一个文件的固执,让我进行了良好的战斗并将其放在一起。 我希望它可以节省大量时间,并减少很多人搜索时的挫败感。

背景

您可能需要学习 XML 的基础知识,并且假定您对 C# 有内在的了解。

使用代码

地址辅助类是通过理解和重写我在网上找到的代码示例而开发的,但我必须赞扬 XML 文件。 请随意使用它,但请保留 XML 文件开头的作者注释。 我不得不花很多时间和耐心在这上面,所以你知道这是怎么回事。

此类提供了一些方法,用于读取 Microsoft 电话注册表条目中找到的“国家/地区”列表并将其转换为更易于处理的格式,还提供了一些方法,用于读取和使用 XML 文件,以根据传入函数的国家/地区名称获取州。

这里最重要的是 XML 文件。

我使用 C# 编写代码,并且可能有更有效的实现,请随意使用。 如果您正在使用该代码,则需要 .NET 2.0,因为 ReadToNextSibling() 函数可能与较低版本不兼容。

特别说明

重新使用时,请务必更改代码的以下方面

  1. readXML 函数中用于访问文件的路径
  2. readXML(string filename, string country) 
    {
      //Some code                                         
      reader = XmlTextReader.Create(Application.Startup + filename, settings);
    
      //Some code
    }
  3. 命名空间

该代码注释非常完善,并且选择了变量名称以方便阅读,因此应该不是问题。 无论如何,这是地址辅助类中值得注意的函数的简短描述。

//This function is called once in the beginning to fill the values from the
//registry and convert it to a key value pair of string(Country name) and
//int(Country Telephone code)

public static void readCountriesRegistry()

//You can call this function from inside this class from the function

public static string[] getCountriesList()

//In which case, you might want to make the readCountriesRegistry() function
//private, or you can call the two functions one after the other in the above
//order... suit yourself.

无论如何,我将此弃用的函数留在类中,以防有人想进行一些弗兰肯斯坦研究

//IGNORE THIS FUNCTION

private void StatesList()

//If you want to experiment with reading from a text file, you can expand this
//Function, otherwise neglect it.

如果您正在处理电话号码,则另一个简短而有用的函数

//Send in a country, get the telephony country code :)

public static string getCountryCode(string country)

我们已经稍微谈论了函数 readXML。 它接受包含国家/地区-州树的 XML 文件的文件名。

public static string[] readXML(string filename, string country)

XML 文件非常简单但有效。 它具有根元素“Countries”,以及许多“Country”类型的子元素。 每个国家/地区还具有许多带有“state”标签的子元素。 结构如下

<!DOCTYPE Countries [
 <!ELEMENT Countries (Country*)>
 <!ELEMENT Country (state*) >
 <!ATTLIST Country name CDATA #REQUIRED >
 <!ELEMENT state (#PCDATA)>
]>

就是这样! 现在它工作得很好。 如果您发现任何错误或改进,请告诉我,我会很乐意调查。 我希望你觉得它有用。

关注点

真令人惊讶的是我没有找到这个,但这是一个很好的经验。 我严格来说是一个 OO 人,但这件事让 XML 在我的腰带上又多了一个缺口。

唯一的事情是,处理 XML 文件的组装需要惊人的耐心。 如果你看到该文件,你就会知道:)

历史

该代码现在适用于国家和州,但我计划在我有时间时将其扩展到包括城市。 如果有人想继续进行这场伟大的战斗并帮助我,我将很高兴!

祝您编码愉快!

© . All rights reserved.