using System;using System.Collections;using System.ComponentModel;using System.Drawing;using System.Windows.Forms;using System.Xml;namespace ReadXmlDemo{ /**//// <summary> /// Form1 的摘要说明。 /// </summary> public class Form1 : Form { private Button button1; private Container components = null; public static void Main() { Application.Run(new Form1()); } public Form1() { InitializeComponent(); } protected override void Dispose(bool disposing) { if (disposing) { if (components != null) { components.Dispose(); } } base.Dispose(disposing); } Windows 窗体设计器生成的代码#region Windows 窗体设计器生成的代码 /**//// <summary> /// 设计器支持所需的方法 - 不要使用代码编辑器修改 /// 此方法的内容。 /// </summary> private void InitializeComponent() { this.button1 = new Button(); this.SuspendLayout(); // // button1 // this.button1.Location = new Point(176, 48); this.button1.Name = "button1"; this.button1.TabIndex = 0; this.button1.Text = "button1"; this.button1.Click += new EventHandler(this.button1_Click); // // Form1 // this.AutoScaleBaseSize = new Size(6, 14); this.ClientSize = new Size(292, 273); this.Controls.Add(this.button1); this.Name = "Form1"; this.Text = "Form1"; this.ResumeLayout(false); } #endregion private void button1_Click(object sender, EventArgs e) { Setup(); string url = "/pmanager/scm/frmscmindex.aspx"; string param = "projectid"; XmlNode[] ancestors = GetAncestorNodeList(url, param); // test results if (ancestors != null) { foreach (XmlNode node in ancestors) MessageBox.Show(node.OuterXml); } } private XmlDocument doc; /**//// <summary> /// 加载 Xml 文档 /// </summary> private void Setup() { doc = new XmlDocument(); try { doc.Load(Application.StartupPath + "//nav.xml"); } catch { throw new Exception("Xml 文件加载失败。"); } } /**//// <summary> /// 得到指定节点的祖先节点的数组(强类型) /// </summary> /// <param name="url"></param> /// <param name="param"></param> /// <returns></returns> private XmlNode[] GetAncestorNodeList(string url, string param) { XmlNode targetNode = doc.SelectSingleNode("//siteMapNode[@url='" + url + "' and @param='" + param + "']"); if (targetNode == null) return null; ArrayList alAncestors = new ArrayList(); for (XmlNode node = targetNode.ParentNode; node != null && node != doc.DocumentElement; node = node.ParentNode) { alAncestors.Add(node); } alAncestors.Reverse(); XmlNode[] nodeList = (XmlNode[]) alAncestors.ToArray(typeof (XmlNode)); return nodeList; } }}