用WCF服务来动态的获取本地XML省市区文档

建立一个WCF服务。

  1 using ClassLibrary;

  2 using System;

  3 using System.Collections.Generic;

  4 using System.Linq;

  5 using System.Runtime.Serialization;

  6 using System.ServiceModel;

  7 using System.ServiceModel.Web;

  8 using System.Text;

  9 using System.Xml;

 10 

 11 namespace AreaService

 12 {

 13     // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码、svc 和配置文件中的类名“Service1”。

 14     // 注意: 为了启动 WCF 测试客户端以测试此服务,请在解决方案资源管理器中选择 Service1.svc 或 Service1.svc.cs,然后开始调试。

 15     public class Service1 : IService1

 16     {

 17         public static class api

 18         {

 19             public static XmlDocument cacheAreaDocument { get; set; }

 20             public static XmlDocument cacheUrlMapDocument { get; set; }

 21         }

 22         public List<ClassLibrary.Area> GetProvince()

 23         {

 24             XmlDocument xd = api.cacheAreaDocument;

 25             if (xd == null)

 26             {

 27                 xd = new XmlDocument();

 28                 xd.Load(AppDomain.CurrentDomain.BaseDirectory + "/data/ChinaArea.xml");

 29             }

 30             XmlNode xn = xd.SelectSingleNode("area");

 31             List<Area> areas = new List<Area>();

 32             //等效于 XmlNode xn = xd.DocumentElement;

 33             foreach (XmlNode province in xn.ChildNodes)

 34             {

 35                 XmlElement proEl = (XmlElement)province;

 36                 areas.Add(new Area { province = proEl.GetAttribute("province"), provinceID = proEl.GetAttribute("provinceID") });

 37             }

 38             return areas;

 39         }

 40         public List<ClassLibrary.Area> GetCityByProvinceId(string provinceID)

 41         {

 42             XmlDocument xd = api.cacheAreaDocument;

 43             if (xd == null)

 44             {

 45                 xd = new XmlDocument();

 46                 xd.Load(AppDomain.CurrentDomain.BaseDirectory + "/data/ChinaArea.xml");

 47             }

 48             XmlNode xn = xd.SelectSingleNode("area");

 49             List<ClassLibrary.Area> areas = new List<ClassLibrary.Area>();

 50             foreach (XmlNode province in xn.ChildNodes)

 51             {

 52                 XmlElement pro = (XmlElement)province;

 53                 if (pro.GetAttribute("provinceID") == provinceID)

 54                 {

 55                     foreach (var cityNd in pro.ChildNodes)

 56                     {

 57                         XmlElement city = (XmlElement)cityNd;

 58                         areas.Add(new ClassLibrary.Area { City = city.GetAttribute("City"), CityID = city.GetAttribute("CityID") });

 59                     }

 60                 }

 61             }

 62             if (xn.ChildNodes == null || xn.ChildNodes.Count <= 0)

 63             {

 64                 areas.Add(new ClassLibrary.Area { City = "", CityID = "" });

 65             }

 66             return areas;

 67         }

 68 

 69         public List<ClassLibrary.Area> GetPieceareaByCityID(string CityID)

 70         {

 71             List<Area> areas = new List<Area>();

 72             if (CityID.Trim() == "")

 73             {

 74                 areas.Add(new Area { Piecearea = "", PieceareaID = "" });

 75                 return areas;

 76             }

 77             XmlDocument xd = api.cacheAreaDocument;

 78             if (xd == null)

 79             {

 80                 xd = new XmlDocument();

 81                 xd.Load(AppDomain.CurrentDomain.BaseDirectory + "/data/ChinaArea.xml");

 82             }

 83             XmlNode xn = xd.SelectSingleNode("area");

 84 

 85             //等效于 XmlNode xn = xd.DocumentElement;

 86             foreach (XmlNode province in xn.ChildNodes)

 87             {

 88                 foreach (XmlNode cityNd in province.ChildNodes)

 89                 {

 90                     if ((cityNd as XmlElement).GetAttribute("CityID") == CityID)

 91                     {

 92                         foreach (var pieceareaNd in cityNd.ChildNodes)

 93                         {

 94                             XmlElement piecearea = (XmlElement)pieceareaNd;

 95                             areas.Add(new Area { Piecearea = piecearea.GetAttribute("Piecearea"), PieceareaID = piecearea.GetAttribute("PieceareaID") });

 96                         }

 97                     }

 98 

 99                 }

100             }

101             return areas;

102         }

103     }

104 }


建立后生成。然后在前端添加服务引用。

实例化。

 1 using System;

 2 using System.Collections.Generic;

 3 using System.ComponentModel;

 4 using System.Data;

 5 using System.Drawing;

 6 using System.Linq;

 7 using System.Text;

 8 using System.Windows.Forms;

 9 

10 namespace 动态的获取省市

11 {

12     public partial class Form1 : Form

13     {

14         public Form1()

15         {

16             InitializeComponent();

17             sa = new AreaService.Service1Client();

18         }

19         AreaService.Service1Client sa;

20         private void Form1_Load(object sender, EventArgs e)

21         {

22             comboBox1.DataSource = sa.GetProvince();

23             comboBox1.DisplayMember = "province";

24             comboBox1.ValueMember = "provinceID";

25             comboBox1_SelectedIndexChanged(sender,e);

26             comboBox2_SelectedIndexChanged(sender, e);

27             comboBox3_SelectedIndexChanged(sender, e);

28 

29         }

30         /// <summary>

31         /// 获取市

32         /// </summary>

33         /// <param name="sender"></param>

34         /// <param name="e"></param>

35         private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)

36         {

37             comboBox2.DataSource = sa.GetCityByProvinceId(comboBox1.SelectedValue+"");

38             comboBox2.DisplayMember = "City";

39             comboBox2.ValueMember = "CityID";

40         }

41        

42         private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)

43         {

44             comboBox3.DataSource = sa.GetPieceareaByCityID(comboBox2.SelectedValue+"");

45             comboBox3.DisplayMember = "Piecearea";

46             comboBox3.ValueMember = "PieceareaID";

47         }

48       

49 

50         private void comboBox3_SelectedIndexChanged(object sender, EventArgs e)

51         {

52 

53         }

54 

55         private void button1_Click(object sender, EventArgs e)

56         {

57 

58         }

59 

60 

61     }

62 }

这是窗体设计代码:

namespace 动态的获取省市

{

    partial class Form1

    {

        /// <summary>

        /// 必需的设计器变量。

        /// </summary>

        private System.ComponentModel.IContainer components = null;



        /// <summary>

        /// 清理所有正在使用的资源。

        /// </summary>

        /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>

        protected override void Dispose(bool disposing)

        {

            if (disposing && (components != null))

            {

                components.Dispose();

            }

            base.Dispose(disposing);

        }



        #region Windows 窗体设计器生成的代码



        /// <summary>

        /// 设计器支持所需的方法 - 不要

        /// 使用代码编辑器修改此方法的内容。

        /// </summary>

        private void InitializeComponent()

        {

            this.label1 = new System.Windows.Forms.Label();

            this.label2 = new System.Windows.Forms.Label();

            this.label3 = new System.Windows.Forms.Label();

            this.comboBox1 = new System.Windows.Forms.ComboBox();

            this.comboBox2 = new System.Windows.Forms.ComboBox();

            this.comboBox3 = new System.Windows.Forms.ComboBox();

            this.button1 = new System.Windows.Forms.Button();

            this.SuspendLayout();

            // 

            // label1

            // 

            this.label1.AutoSize = true;

            this.label1.Location = new System.Drawing.Point(40, 50);

            this.label1.Name = "label1";

            this.label1.Size = new System.Drawing.Size(29, 12);

            this.label1.TabIndex = 0;

            this.label1.Text = "省:";

            // 

            // label2

            // 

            this.label2.AutoSize = true;

            this.label2.Location = new System.Drawing.Point(40, 111);

            this.label2.Name = "label2";

            this.label2.Size = new System.Drawing.Size(29, 12);

            this.label2.TabIndex = 1;

            this.label2.Text = "市:";

            // 

            // label3

            // 

            this.label3.AutoSize = true;

            this.label3.Location = new System.Drawing.Point(40, 175);

            this.label3.Name = "label3";

            this.label3.Size = new System.Drawing.Size(29, 12);

            this.label3.TabIndex = 2;

            this.label3.Text = "区:";

            // 

            // comboBox1

            // 

            this.comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;

            this.comboBox1.FormattingEnabled = true;

            this.comboBox1.Location = new System.Drawing.Point(87, 47);

            this.comboBox1.Name = "comboBox1";

            this.comboBox1.Size = new System.Drawing.Size(121, 20);

            this.comboBox1.TabIndex = 3;

            this.comboBox1.SelectedIndexChanged += new System.EventHandler(this.comboBox1_SelectedIndexChanged);

            // 

            // comboBox2

            // 

            this.comboBox2.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;

            this.comboBox2.FormattingEnabled = true;

            this.comboBox2.Location = new System.Drawing.Point(87, 108);

            this.comboBox2.Name = "comboBox2";

            this.comboBox2.Size = new System.Drawing.Size(121, 20);

            this.comboBox2.TabIndex = 4;

            this.comboBox2.SelectedIndexChanged += new System.EventHandler(this.comboBox2_SelectedIndexChanged);

            // 

            // comboBox3

            // 

            this.comboBox3.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;

            this.comboBox3.FormattingEnabled = true;

            this.comboBox3.Location = new System.Drawing.Point(87, 172);

            this.comboBox3.Name = "comboBox3";

            this.comboBox3.Size = new System.Drawing.Size(121, 20);

            this.comboBox3.TabIndex = 5;

            this.comboBox3.SelectedIndexChanged += new System.EventHandler(this.comboBox3_SelectedIndexChanged);

            // 

            // button1

            // 

            this.button1.Location = new System.Drawing.Point(87, 226);

            this.button1.Name = "button1";

            this.button1.Size = new System.Drawing.Size(75, 23);

            this.button1.TabIndex = 6;

            this.button1.Text = "确  定";

            this.button1.UseVisualStyleBackColor = true;

            this.button1.Click += new System.EventHandler(this.button1_Click);

            // 

            // Form1

            // 

            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);

            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;

            this.ClientSize = new System.Drawing.Size(261, 272);

            this.Controls.Add(this.button1);

            this.Controls.Add(this.comboBox3);

            this.Controls.Add(this.comboBox2);

            this.Controls.Add(this.comboBox1);

            this.Controls.Add(this.label3);

            this.Controls.Add(this.label2);

            this.Controls.Add(this.label1);

            this.Name = "Form1";

            this.Text = "Form1";

            this.Load += new System.EventHandler(this.Form1_Load);

            this.ResumeLayout(false);

            this.PerformLayout();



        }



        #endregion



        private System.Windows.Forms.Label label1;

        private System.Windows.Forms.Label label2;

        private System.Windows.Forms.Label label3;

        private System.Windows.Forms.ComboBox comboBox1;

        private System.Windows.Forms.ComboBox comboBox2;

        private System.Windows.Forms.ComboBox comboBox3;

        private System.Windows.Forms.Button button1;

    }

}

 效果如下:

用WCF服务来动态的获取本地XML省市区文档

你可能感兴趣的:(xml)