简体   繁体   English

LINQ to XML(动态XML)

[英]LINQ to XML (Dynamic XML)

I have an XML file which has kind of a similar structure that you can see below: I would like to select title and subitems using LINQ to XML . 我有一个XML文件,它有一些类似的结构,你可以在下面看到:我想使用LINQ to XML选择标题和子项。 The difficulties that I have: sometimes a subitem can be just one and sometimes it can be 20 subitems, and I need to add them to List<string>. 我遇到的困难:有时一个子项只能是一个,有时它可能是20个子项,我需要将它们添加到List <string>。

<?xml version="1.0"?>
<items>
    <item>
        <title>Name of the title</title>
        <subitem>Test</subitem>
        <subitem1>Test</subitem1>
        <subitem2>Test</subitem2>
        <subitem3>Test</subitem3>
        <subitem4>Test</subitem4>
        <subitem5>Test</subitem5>
    </item>
    <item>
        <title>Name of the title</title>
        <subitem>Test</subitem>
        <subitem1>Test</subitem1>
        <subitem2>Test</subitem2>
        <subitem3>Test</subitem3>
    </item>
    <item>
        <title>Name of the title</title>
        <subitem>Test</subitem>
        <subitem1>Test</subitem1>
    </item>
</items>
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()
            };

The solution, including getting the titles, is: 解决方案,包括获得标题,是:

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")));

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM