如何在c#中使用Linq到Xml的几个级别
本文关键字:几个 Xml Linq | 更新日期: 2023-09-27 18:13:12
所以我在"root"元素中创建了一个具有多个级别的xml。基本上是这样的:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Collectibles>
<SaveAltars>
<SaveAltar>
<Location>
<row>0</row>
<col>1</col>
</Location>
<Quantity>1</Quantity>
<Collected />
</SaveAltar>
<SaveAltar>
<Location>
<row>0</row>
<col>3</col>
</Location>
<Quantity>1</Quantity>
<Collected />
</SaveAltar>
<Fruits>
<Fruit>
<Location>
<row>0</row>
<col>1</col>
</Location>
<Quantity>7</Quantity>
<Collected />
</Fruit>
<Fruit>
<Location>
<row>0</row>
<col>4</col>
</Location>
<Quantity>4</Quantity>
<Collected />
</Fruit>
</Fruits>
<Lizards>
<Lizard>
<Location>
<row>0</row>
<col>1</col>
</Location>
<Quantity>1</Quantity>
<Collected />
</Lizard>
<Lizard>
<Location>
<row>0</row>
<col>3</col>
</Location>
<Quantity>1</Quantity>
<Collected />
</Lizards>
</Collectibles>
我也有简单的类,像这样:
class Fruit
{
public string Col;
public string Row;
public string Quantity;
public string Collected;
}
并且我愿意使用linQ to Xml制作水果/蜥蜴/savealars的列表,但我不知道你必须继续阅读每个级别的收藏品列表。比如阅读一个Fruit,然后将其保存到一个类中,并将其放入列表中。
我该怎么做呢?
现在我试着像
XDocument collectXml = XDocument.Load("collect.xml");
foreach (XElement elem in collectXml.Descendants("Collectibles").Descendants("SaveAltars"))
{
MessageBox.Show(elem.Descendants("Location").Descendants("row").ToString());
}
但是它显示了一些随机代码,我不知道如何填充类并将其保存在xml文件中的每个元素的列表中:/
你能帮帮我吗?
听起来你想要这样做:
var fruit = collectXml
.Descendants("Fruit")
.Select(x => new Fruit {
Col = (string) x.Element("Location").Element("Col"),
Row = (string) x.Element("Location").Element("Row"),
Quantity = (string) x.Element("Quantity"),
Collected = x.Element("Collected") == null ? "Yes" : "No"
})
.ToList();
正如评论中所指出的那样,您应该真的考虑使用更合适的类型-您可能需要Location
类型用于位置(Row
和Column
的int
值),Quantity
的int
, Collected
的bool
。哦,我强烈建议使用属性而不是公共字段。