【问题标题】:Return all Elements and Sub-elements返回所有元素和子元素
【发布时间】:2013-06-20 16:32:49
【问题描述】:

是否可以使用一个 LINQ 查询同时返回所有元素和子元素的值?使用下面的查询,我可以检索第一个元素,但不能检索子元素。

var query = from c in xDoc.Descendants("file")
            orderby c.Name
            select new
            {
                // This gets the main elements
                Name = (string)c.Element("name").Value,
            };

XML 文件如下所示:

<files>
    <file id="1">
        <name>A file</name>
        <processDetails>
            <purpose>It's supposed to get files.</purpose>
            <filestoProcess>
                <file>alongfile.pgp</file>
                <file>Anotherfile.pgp</file>
                <file>YetAnotherfile.CSV</file>
            </filestoProcess>
            <schedule>
                <day>Mon</day>
                <day>Tue</day>
                <time>9:00am</time>
            </schedule>
            <history>
                <historyevent>Eh?</historyevent>
                <historyevent>Two</historyevent>
            </history>
        </processDetails>
    </file>
<files>

此外,一旦检索到,我将如何访问子元素以填充列表框和/或文本框?

【问题讨论】:

  • 您的示例 XML 不包含任何 &lt;script&gt; 元素。当代码与示例数据不匹配时,很难为您提供帮助。同样,您谈论了多个 name 元素,但您只展示了一个......而且您也不清楚您想要的结果是什么。 (顺便说一句,当您只有一个属性时,为什么要使用匿名类型?)
  • 假设 script==file 你仍然需要以什么形式指明你需要哪些子元素。
  • 您的结束 &lt;files&gt; 标签中没有 /
  • 您需要给出所需输出的示例。

标签: c# xml linq-to-xml


【解决方案1】:

您的查询的问题是您的第一个 file 元素似乎与您的孩子 file 元素的类型不同。

因此,当您实际执行查询时,您将无法找到子file 元素的name 属性,而您将获得null reference exception when you try to invoke theValueproperty of the childfile` 元素。


您似乎试图做的事情没有多大意义。但也许您想要以下内容:

var query = from c in xdoc.Descendants("file")
            orderby c.Name
            select new
            {
                // This gets the main elements
                Name = c.Element("name") == null ? c.Value : c.Element("name").Value,
            };

【讨论】:

    猜你喜欢
    • 2020-08-13
    • 2018-11-13
    • 2017-11-26
    • 2015-08-29
    • 1970-01-01
    • 1970-01-01
    • 2020-07-31
    • 1970-01-01
    • 2014-11-18
    相关资源
    最近更新 更多