【问题标题】:Read all descendants of a single element读取单个元素的所有后代
【发布时间】:2014-09-12 11:31:50
【问题描述】:

我有以下 XML 文件:

<data>
    <set1>
        <entry>Entry #1</entry>
        <entry>Entry #2</entry>
    </set1>
</data>

我正在尝试读取 SET 元素的所有后代。我不确定我是否混淆了元素和后代等术语,所以我现在要停止使用它们:)

这是我使用的 C# 代码:

List<String> list = new List<String>();
XDocument xml = XDocument.Load("file.xml");

var desc = xml.Descendants("set1");
foreach (var entry in desc) {
    list.add(entry.Value);
    Console.Write("element: " + entry.Value);
}

但是,我只得到一个“Entry #1Entry #2”,而不是两行控制台输出“Entry #1”和“Entry #2”。感谢您的帮助!

【问题讨论】:

    标签: c# xml linq-to-xml xmldocument


    【解决方案1】:

    类似的东西:

     var desc = xd.Descendants("set1").Elements("entry");
    

    【讨论】:

    • 谢谢先生,成功了!
    • @Tomáš'GunsBlazing'Frček 永远欢迎 :)
    【解决方案2】:

    改成

    var desc = xml.Descendants("set1").Descendants();
    

    还有

    Console.WriteLine
    

    我刚刚试了一下,效果很好。

    错误是Descendants("set1") 没有给你set1 的后代。它为您提供了 xml 的根后代,它们被 称为 set1

    至于Console.WriteLine - 它在其写入内容的末尾添加一个换行符。

    【讨论】:

    • 它有效,谢谢,在我看来,使用不带参数的 Elements() 函数应该与使用 Descendants() 函数一样。
    • @Tomáš'GunsBlazing'Frček 不完全是。 Descendants 也会给你嵌套的后代。在这种情况下,没有。但是试试看:&lt;entry&gt;&lt;abc&gt;Entry #2&lt;/abc&gt;&lt;/entry&gt; 看看会发生什么。这完全取决于您到底需要什么。
    • @Tomáš'GunsBlazing'Frček 不客气。我不是故意不同意蒂里桑古。我只是在他打字的时候输入我的答案(只是慢了:)并自动选择了Descendants。正如我所说 - 最适合你的。
    猜你喜欢
    • 2020-05-10
    • 1970-01-01
    • 2016-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-02
    • 1970-01-01
    相关资源
    最近更新 更多