Получить имена тегов программно - C#
Формулировка задачи:
<a>
<b>
<c></c>
<d></d>
</b>
<b>
<d></d>
<f></f>
</b>
<b>
<d></d>
<f></f>
<e>
<y></y>
<z></z>
</e>
</b>
</a>
Решение задачи: «Получить имена тегов программно»
textual
Листинг программы
string xml = @"<root><item>
<id>id</id>
<first_name>first_name</first_name>
<last_name>last_name</last_name>
<country>
<id>1</id>
<title>Россия</title>
</country>
<has_mobile>1</has_mobile>
<skype>skype</skype>
</item>
<item>
<id>id</id>
<first_name>first_name</first_name>
<last_name>last_name</last_name>
<has_mobile>1</has_mobile>
<last_seen>
<time>1485967067</time>
<platform>4</platform>
</last_seen>
</item></root>";
XElement xdoc = XElement.Parse(xml);
// Формируем массив уникальных дочерних элементов
string[] namesXPath = xdoc.Elements("item")
.SelectMany(x => x.Descendants())
.Where(x => !x.HasElements)
.Select(x => {
string name = x.Name.LocalName;
XElement xx = x;
while (xx.Parent.Name.LocalName != "item") {
xx = x.Parent;
name = xx.Name.LocalName + "/" + name;
}
return name;
})
.Distinct()
.ToArray();
// Перебираем по очереди все элементы item
foreach (XElement xitem in xdoc.Elements("item"))
{
// Перебираем все возможные дочерние элементы и пытаемся получить их значение
foreach (string xpath in namesXPath)
{
XElement x = xitem.XPathSelectElement(xpath);
string value = x == null ? "" : x.Value;
Console.WriteLine("{0}={1}", xpath, value);
}
Console.WriteLine("-------------------------");
}