c# - 如何使用 LINQ to XML 接收列表格式的数据

标签 c# .net xml linq

使用 C#、.net 4.5

昨天我问的是how to read xml file 。正如昨天所解释的,我可以使用 Descendants()Elements()用于获取我的文件所需的元素。

现在,我有包含一些实体的 xml 文件

<Library>
  <Book>
    <Author>Harrison FORD</Author>
    <Name>Unknown Name</Name>
    <Year>2000</Year>
   <Genre>Unknown Genre</Genre>
    <BookID>fc29b1cf-be41-4ed8-b101-5355396fef10</BookID>
  </Book>
  <Book>
    <Author>Unknown Author</Author>
    <Name>Unknown Name</Name>
    <Year>2000</Year>
    <Genre>Unknown Genre</Genre>
    <BookID>29b6d74b-71b3-4df6-af0b-d676ff5d23ad</BookID>
  </Book>
...
</Library>

我想要的 - 获取书籍列表(如 List<Book> ),其中书籍 - 它是一个单独的实体,具有与 xml 文件中相同的属性。

根据昨天的讨论尝试下一步

//get collection of all books
var myLib = from el in myDoc.Descendants("Library")
     select el.Element("Book");
     //create empty book
     Book addOneBook = new Book();
     //try to get each value and than save to just created book
     foreach (var books in myLib)
     {
     var myBook = from el in books.Descendants("Book")
          select el.Element("Author").Value.Trim();
      addBook.BookAuthor = myBook.ToString(); 
      ...
     //save
      myListWithBooks.Add(addOneBook);

我的理解是这样的

enter image description here

在调试过程中发现,booksforeach就像下面的图片一样 - 正是我想要的

enter image description here

但是,当我尝试从中获取任何元素的值时 - 得到的值并不完全是所需的值 - 就像

enter image description here

想想,我有些想念。我哪里错了?也许我没有完全正确理解或者有些东西是错误的?为什么第一次 - 一切都像我一样工作,而第二次相同的代码返回另一个结果?

Aslo,也许还有另一种方法可以从这个 XML 中获取我需要的信息,但无论如何 - 想知道我现在用这段代码错在哪里。


编辑

enter image description here

最佳答案

您正在查询上调用ToString - 这不是在单个元素上。

即使您解决了这个问题,您也会向列表中添加对同一对象的大量引用...并且这一切都可以使用 LINQ 更清楚地完成:

List<Book> books = myDoc.Root.Elements("Book")
                        .Select(x => new Book { 
                            Author = (string) x.Element("Author"),
                            Name = (string) x.Element("Name"),
                            Year = (int) x.Element("Year"),
                            Genre = (string) x.Element("Genre"),
                            Id = (string) x.Element("BookID")
                        })
                        .ToList();

(请注意,我已将属性名称从 BookAuthor 更改为 Author - 在该类型的属性上重复类型名称是没有意义的。除了图书作者之外,图书还会有哪些其他作者?)

关于c# - 如何使用 LINQ to XML 接收列表格式的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20790623/

相关文章:

.net - 将 EDI 转换为 Xml

c# - 如何刷新 Entity Framework Core DBContext?

c# - Visual Studio 2015 中的 Azure Web 作业 - 部署无法正常工作,出现错误 "target "MSDeployPublish“项目中不存在”。

c# - 在 C# 中旋转 3D 模型

c# - 关于变量名成员前缀

c# - 将多个文件流合并到一个文件中?

java - Java 对 WPF 的回答是什么?

.net - 为什么没有 HybridDictionary 的通用版本?

java - Android Studio 中的半空间或半空间

android - 对于有这么多数据的东西,JSON 比 XML 好吗 "classification"