簡體   English   中英

如何通過節點的交集進行迭代

[英]how to iterate through intersection of nodes

如何僅通過兩個文檔之間的公共節點進行迭代?

現在,我可以遍歷文檔的所有節點:

var xmlBody = @"<?xml version="1.0" encoding="UTF-8"?>
<Visit>
   <Person>...</Person>
   <Name>...</Name>
   <Color>...</Color>
</Visit>";
    var xdoc = XDocument.Parse(xmlBody);
    foreach (XElement child in xdoc.Elements())
                {//do stuff}

我只想遍歷xdoc.Elements()和我的nodeList之間的公共節點:

var nodeList = new List<string> { "Name", "LastName", "Color" };

nodeListxdoc的交集就是這些節點: Name,Color

我該如何針對交叉路口進行迭代

foreach(XElement child in xdoc.Elements().Intersect(nodeList))

您可能應該使用HashSet而不是列表,然后可以使用以下Linq根據本地名稱過濾出節點

var nodeNames = new HashSet<string> { "Name", "LastName", "Color" };

foreach(var child in xdoc.Elements().Where(e => nodeNames.Contains(e.Name.LocalName)))
{
    // Your code here.
}

我將使用Linq Where和Contains這樣:

        var xmlBody = @"<?xml version=""1.0"" encoding=""UTF-8""?>
<Visit>
   <Person>...</Person>
   <Name>...</Name>
   <Color>...</Color>
</Visit>";
        var xdoc = XDocument.Parse(xmlBody);
        var nodeList = new List<string> { "Name", "LastName", "Color" };

        var intersectedElements = xdoc.Elements()
            .First() //<Visit>
            .Elements()
            .Where(element => nodeList.Contains(element.Name.LocalName));

        foreach (XElement child in intersectedElements)
        {
            Console.WriteLine($"{child.Name.LocalName}: {child.Value}");
        }

如果您想要的元素嵌套得比使用Descendants更深。

        var intersectedNestedElements = xdoc.Descendants()
            .Where(element => nodeList.Contains(element.Name.LocalName));

        foreach (XElement child in intersectedNestedElements)
        {
            Console.WriteLine($"{child.Name.LocalName}: {child.Value}");
        }

兩種輸出:

Name: ...
Color: ...

暫無
暫無

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

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