[英]c# call for values by linq to xml
I'm learning about reading and retrieving data from XML files.我正在学习从 XML 文件中读取和检索数据。 I have xml like this:
我有这样的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>
and class和班级
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; }
}
}
I want to put all Folders values into a list Folder objects using linq to xml?我想使用 linq to xml 将所有文件夹值放入列表文件夹对象中吗? All the example which i found is for first level nodes and I don't know how to get to deeper level of xml and retrieve data from.
我发现的所有示例都是针对一级节点的,我不知道如何进入更深层次的 xml 并从中检索数据。
What about "komps" values which are another list of strings??另一个字符串列表的“komps”值怎么样?
The XDocument
class has a method called Descendants . XDocument
类有一个称为Descendants的方法。 It has an overload where you can provide an XName
as a filter criteria for elements.它有一个重载,您可以在其中提供
XName
作为元素的过滤条件。 Fortunately there is an implicit cast operator between string
and XName
.幸运的是,在
string
和XName
之间有一个隐式转换运算符。
So, in order to retrieve the Folder
elements into a List you can use the following code:因此,为了将
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();
UPDATE : Providing an alternative更新:提供替代方案
You can also filter for the Folders
element and ask for its child nodes:您还可以过滤
Folders
元素并询问其子节点:
document.Descendants("Folders").Elements()
我设法使用循环和 komps 获取数据
var komps = item.Descendants("Folder").Descendants("komps").Descendants("K1");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.