c通过linq到xml调用值



我正在学习如何从XML文件中读取和检索数据。我有这样的xml:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="IK.xsl"?>
<IK>
<Folders>
<Folder>
<name>nameA</name>
<info>nazwa pierwsza</info>
<komps>
<K1 id="1">komp1</K1>
<K1 id="2">komp2</K1>
<K1 id="3">komp3</K1>
<K1 id="4">komp4</K1>
<K1 id="5">komp5</K1>
</komps
</Folder>
<Folder>
<name>nameB</name>
<info>nazwa druga</info>
<komps>
<K1 id="1">komp1</K1>
<K1 id="2">komp2</K1>
<K1 id="3">komp3</K1>
<K1 id="4">komp4</K1>
<K1 id="5">komp5</K1>
</komps
</Folder>
<Folder>
<name>nameC</name>
<info>nazwa trzecia</info>
<komps>
<K1 id="1">komp1</K1>
<K1 id="2">komp2</K1>
<K1 id="3">komp3</K1>
<K1 id="4">komp4</K1>
<K1 id="5">komp5</K1>
</komps 
</Folder>
</Folders>
</IK>

和类

public class Foldery
{
public Folder folder { get; set; }
}
public class Folder
{
public string name { get; set; }
public string info { get; set; }
public Komps[] komps { get; set; }
}
public class Komps
{
public string K1 { get; set; }
}
}

我想把所有Folders值放在一个列表中使用linq到xml的Folder对象?我发现的所有示例都是针对一级节点的,我不知道如何深入xml并从中检索数据。

";komps";值是另一个字符串列表??

XDocument类有一个名为Descendants的方法。它有一个重载,您可以在其中提供XName作为元素的筛选条件。幸运的是,在stringXName之间有一个隐式强制转换运算符。

因此,为了将Folder元素检索到List中,您可以使用以下代码:

//Retrieve and load the xml
using var fs = File.OpenRead("Sample.xml");
var reader = new StreamReader(fs);
var rawXml = reader.ReadToEnd();
//Parse the xml
var document = XDocument.Parse(rawXml);
var folders = document.Descendants("Folder")
.Select(element => new Folder
{
Name = element.Element("name")?.Value,
Info = element.Element("info")?.Value,
}).ToList();

更新:提供替代

您还可以筛选Folders元素并要求其子节点:

document.Descendants("Folders").Elements()

我设法使用循环和获取komps中的数据


var komps = item.Descendants("Folder").Descendants("komps").Descendants("K1");

最新更新