XPATH
Den delen av klassen Form1 som laster opp data og gir respons på museklikk på de fire knappene ser slik ut:
XmlDocument doc; public Form1() { InitializeComponent(); try { webBrowser1.Url = new Uri(label1.Text); doc = new XmlDocument(); // cannot take the text directly from browser ? doc.Load(label1.Text); } catch (Exception x) { webBrowser1.DocumentText=String.Format(@"<html><body> <h1>{0}</h1> <p>{1}</p> </body></html>","ERROR",x.Message); button1.Hide(); button2.Hide(); button3.Hide(); } } private void AllInBarcelona_Click(object sender, EventArgs e) { XmlNodeList list = doc.SelectNodes( "//OlympicGame[@place='Barcelona']/event/athlet"); show(list); } private void All100m_Click(object sender, EventArgs e) { XmlNodeList list = doc.SelectNodes( "//event[@dist='100m']/athlet"); show(list); } private void Sidney400m_Click(object sender, EventArgs e) { XmlNodeList list = doc.SelectNodes( "//OlympicGame[@place='Sidney']/event[@dist='400m']/athlet"); show(list); } private void Jamaica_Click(object sender, EventArgs e) { XmlNodeList list = doc.SelectNodes( "//athlet[nation='JAM']"); show(list); }
Selve framvisningen er laget slik at hvert navn forekommer kun en gang:
private void show(XmlNodeList list) { ArrayList athletNames=new ArrayList(30); foreach (XmlElement elt in list) { String athletname = elt.GetElementsByTagName("name")[0].InnerText; if (!athletNames.Contains(athletname)) athletNames.Add(athletname); } StringBuilder T=new StringBuilder(1000); foreach (String name in athletNames) T.Append(name+"\r\n"); textBox1.Text = T.ToString(); }
En enklere variant der vi ikke sjekker om et navn finnes fra før er sliK:
private void show(XmlNodeList list) { StringBuilder T = new StringBuilder(1000); foreach (XmlElement elt in list) T.Append( elt.GetElementsByTagName("name")[0].InnerText); textBox1.Text = T.ToString(); }