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();
}





