ДА есть элемент, который по умолчанию имеет встроенный.
Ответ - это элемент span.
<span>
Я бы использовал Linq Где и Содержит так:
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}");
}
Если вы хотите, чтобы элементы могли быть вложены глубже, чем использовать Потомки.
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: ...
Вместо списка вы, вероятно, должны использовать 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.
}