Как и ответ @Miller, Linq to Xml прост, но если вы хотите использовать XmlDocument
, вы можете изменить код, например:
1 - sXml
для теста:
string sXml = @"
<kazaliste>
<predstave>
<predstava id='2110' naziv='Vaclav Havel AUDIJENCIJA'>
<glumci>
<glumac>140</glumac>
<glumac>200</glumac>
</glumci>
</predstava>
<predstava id='2111' naziv='Vaclav Havel AUDIJENCIJA1'>
<glumci>
<glumac>141</glumac>
<glumac>201</glumac>
</glumci>
</predstava>
</predstave>
</kazaliste>";
2 - Predstave class, немного измените конструктор:
public struct Predstave
{
public int ID;
public string Naziv;
public List<int> gID;
public Predstave(int id, string naziv, List<int> gid)
{
ID = id;
Naziv = naziv;
//asign gid to gID
gID = gid;
}
}
3 - DohvatiPredstave method, вы могли бы oop на gluma c для каждого predstava node, например:
XmlDocument oXml = new XmlDocument();
oXml.LoadXml(sXml);
XmlNodeList oNodes = oXml.SelectNodes("//kazaliste/predstave/predstava");
foreach (XmlNode oNode in oNodes)
{
int id = Convert.ToInt32(oNode.Attributes["id"].Value);
string naziv = oNode.Attributes["naziv"].Value;
List<int> gid = new List<int>();
foreach (XmlNode gNode in oNode.SelectNodes("./glumci/glumac"))
{
gid.Add(Convert.ToInt32(gNode.InnerText));
}
Predstave oPredstava = new Predstave(id, naziv, gid);
predstava.Add(oPredstava);
}
4 - Linq to Xml XDcoument
:
XDocument xDocument = XDocument.Parse(sXml);
List<Predstave> result = xDocument.Descendants("predstava")
.Select(x => new Predstave
{
ID = int.Parse(x.Attribute("id").Value),
Naziv = x.Attribute("naziv").Value,
gID = x.Descendants("glumac")
.Select(y => int.Parse(y.Value))
.ToList()
}).ToList();
Надеюсь, вы найдете это полезным.