Получить имена тегов программно - 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>
Как мне получить имена тегов, которые не содержать в себе дочерних элементов, т.е c,d,f,y,z итп

Решение задачи: «Получить имена тегов программно»

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("-------------------------");
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.067 из 5