Parsing tag interno con il suo valore

Ho un plist in questo formato:

   Title Chapters Items   Title XYZ   Title ABC     Title ChaptersONE Items   Title ASDF     

Ho una class Chapters di class con String e List:

ne ho bisogno in questo modo: i capitoli contengono una lista di sottoargomenti come XYZ e ABC e così via … ChaptersONE contiene una lista di sottoargomenti come ASDF e così via …

Ora ho provato in questo modo:

 XDocument doc = XDocument.Load(FileName);// plist file name XElement plist = doc.Element("plist"); XElement array = plist.Element("array"); Chapters chapters = null; String keyValue = String.Empty; chapters.listOfItems = new List(); using (XmlReader reader = array.CreateReader()) { reader.MoveToContent(); while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element) { if (reader.Name == "dict") { chapters = new Chapters(); listOfItems.Add(chapters); } else if (reader.Name == "key") { if (!reader.Read()) { break; } else if (reader.NodeType == XmlNodeType.Text || reader.NodeType == XmlNodeType.CDATA) { keyValue = reader.Value; } } else if (reader.Name == "string") { if (!reader.Read()) { break; } else if (highwayCode != null && reader.NodeType == XmlNodeType.Text || reader.NodeType == XmlNodeType.CDATA) { switch (keyValue) { case "Title": chapters.Header = reader.Value; break; case "Items": break; default: break; } } } } } } 

Ma tutto il titolo Main (Headers like Chapters and ChaptersOne) e anche i sottoargomenti stanno solo assegnando solo la stringa, cosa sto facendo di sbagliato qui?

Come risolvere questo?

EDIT Chapters dovrebbe contenere un elenco di sotto-argomenti come XYZ e ABC e così via … ChaptersONE dovrebbe contenere un elenco di sotto-argomenti come ASDF e così via …

Sì, c’è un modo più semplice:

 XDocument doc = XDocument.Load("input.xml");// plist file name var chapters = (from d in doc.Root.Element("array").Elements("dict") select new Chapter { Title = (string)d.Element("string"), SubTitles = d.Element("array") .Elements("dict") .Elements("string") .Select(s => (string)s) .ToList() }).ToList(); 

Non hai mostrato le tue lezioni, quindi ho pensato che fosse così:

 class Chapter { public string Title { get; set; } public List SubTitles { get; set; } }