无法弄清楚如何在 Visual Studio C# 中读取 xml 数据

Can't figure out how to read xml data in Visual Studio C#

我不确定如何从 XML 文件中读取数据。

XML 文件如下所示:

<?xml version="1.0" encoding="utf-8"?>
<Lijsten>
<Lijst>
    <Titel>Discipline</Titel>
    <Waardes>Elektro</Waardes>
    <Waardes>Mechanisch</Waardes>
    <Waardes>Civiel</Waardes>
    <Waardes>Proces</Waardes>
</Lijst>
<Lijst>
    <Titel>Soort</Titel>
    <Waardes>Tekening</Waardes>
    <Waardes>Tekst doc</Waardes>
    <Waardes>Afbeelding</Waardes>
</Lijst>
<Lijst>
    <Titel>Afdruk</Titel>
    <Waardes>Landscape</Waardes>
    <Waardes>Portrait</Waardes>
</Lijst>
<Lijst>
    <Titel>Kleur</Titel>
    <Waardes>Kleur</Waardes>
    <Waardes>Zwart</Waardes>
</Lijst>
<Lijst>
<Titel>Kader</Titel>
<Waardes>Aanwezig</Waardes>
<Waardes>Niet aanwezig</Waardes>
</Lijst>
</Lijsten>

我正在尝试为每个 "Lijst" 创建一个单选按钮菜单。

到目前为止我得到了什么(不多):

XmlTextReader reader = new XmlTextReader("iniFile.xml");
while (reader.Read())
{
     while (reader.ReadToFollowing("Lijst"))
     {
          while (reader.ReadToFollowing("Titel"))
          {

          }
     }
}

使用 XElement class 和 LinqToXML:

XElement xml = XElement.Parse(xml);
var buttons = xml.Element("Lijsten")
                 .Elements()
                 .Select(p => new { Titel = p.Element("Titel").Value })
                 .ToArray();

如果您不想使用XElement阅读,您可以使用XmlDocument and XPath

看看这个例子,得到所有的标题:

XmlDocument xdoc = new XmlDocument();
xdoc.Load(@"C:\temp\inifile.xml");
XmlNodeList nodes = xdoc.SelectNodes("//Titel");

foreach (XmlNode node in nodes)
{
    Console.WriteLine(node.InnerText);
}

或者,获取所有 Lijst 节点,然后遍历它们以获得 title 和 warde 值

XmlDocument xdoc = new XmlDocument();
xdoc.Load(@"C:\temp\inifile.xml");
XmlNodeList nodes = xdoc.SelectNodes("//Lijst");

foreach (XmlNode node in nodes)
{
    Console.WriteLine("this is List with title: " + node["Titel"].InnerText);
    Console.WriteLine("it contains wardes: " + node["Titel"].InnerText);
    XmlNodeList wardeNodes = node.SelectNodes("Waardes");
    foreach (XmlNode wNode in wardeNodes)
    {
        Console.WriteLine("   - " + wNode.InnerText);
    }
}