gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 02:57:15 25 4
gpt4 key购买 nike

使用 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>

我想要什么 - 获取 Books 列表(如 List<Book> ),其中 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

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

另外,也许还有另一种方法可以从这个 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 - 在该类型的属性上重复类型名称没有意义。 Book 除了这本书的作者之外还有什么其他作者?)

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com