簡體   English   中英

c# 通過 linq to xml 調用值

[英]c# call for values by linq to 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; }
        }
}

我想使用 linq to xml 將所有文件夾值放入列表文件夾對象中嗎? 我發現的所有示例都是針對一級節點的,我不知道如何進入更深層次的 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");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM