C# LINQ到XML(动态XML)

C# LINQ到XML(动态XML),c#,linq-to-xml,C#,Linq To Xml,我有一个类似结构的文件,你可以在下面看到: 我想使用选择标题和子项。我遇到的困难是:有时一个子项可以是一个子项,有时可以是20个子项,我需要将它们添加到列表中 书名 试验 试验 试验 试验 试验 试验 书名 试验 试验 试验 试验 书名 试验 试验 解决方案,包括获取标题,是: XDocument yourXDocument = XDocument.Load(yourXmlFilePath); IEnumerable<Tuple<XElement, IEnumerable<X

我有一个类似结构的文件,你可以在下面看到: 我想使用选择标题和子项。我遇到的困难是:有时一个子项可以是一个子项,有时可以是20个子项,我需要将它们添加到列表中


书名
试验
试验
试验
试验
试验
试验
书名
试验
试验
试验
试验
书名
试验
试验

解决方案,包括获取标题,是:

XDocument yourXDocument = XDocument.Load(yourXmlFilePath);
IEnumerable<Tuple<XElement, IEnumerable<XElement>>> yourSubItems =
    yourXDocument.Root.Descendants()
                 .Where(xelem => xelem.Name == "title")
                 .Select(xelem => new Tuple<XElement, IEnumerable<XElement>>(xelem, xelem.Parent.Elements().Where(subelem => subelem.Name.LocalName.StartsWith("subitem")));
XDocument yourXDocument=XDocument.Load(yourXmlFilePath);
IEnumerable子项=
yourXDocument.Root.subjects()文件
.Where(xelem=>xelem.Name==“title”)
.Select(xelem=>newtuple(xelem,xelem.Parent.Elements().Where(subelem=>subelem.Name.LocalName.StartsWith(“子项”));

您能举例说明您希望输出的内容吗?@Eugene:元组为您提供了一个通用构造,用于将不同类型的数据分组在一起,元组是一个对象,其属性Item1为string类型,Item2为int类型,Item3为DateTime类型,我创建的元组有Item1为title XElement,Item2为我创建的是表示标题子项的元素的IEnumerable。
XDocument yourXDocument = XDocument.Load(yourXmlFilePath);
IEnumerable<Tuple<XElement, IEnumerable<XElement>>> yourSubItems =
    yourXDocument.Root.Descendants()
                 .Where(xelem => xelem.Name == "title")
                 .Select(xelem => new Tuple<XElement, IEnumerable<XElement>>(xelem, xelem.Parent.Elements().Where(subelem => subelem.Name.LocalName.StartsWith("subitem")));
XDocument xdoc = XDocument.Load(path_to_xml);
var query = from i in xdoc.Descendants("item")
            select new
            {
                Title = (string)i.Element("title"),
                Subitems = i.Elements()
                            .Where(e => e.Name.LocalName.StartsWith("subitem"))
                            .Select(e => (string)e)
                            .ToList()
            };