Как я могу получить тип элемента, обрабатываемого LINQ-to-XML? - PullRequest
0 голосов
/ 04 июня 2009

С помощью LINQ я получаю четыре элемента из некоторого XML, каждый элемент может иметь свое имя (Книга, Журнал, Статья).

Как получить имя элемента, который я сейчас обрабатываю, например, что-то вроде ElementType () ниже:

using System;
using System.Linq;
using System.Xml.Linq;

namespace TestXmlElement2834
{
    class Program
    {
        static void Main(string[] args)
        {

            XElement content = new XElement("content",
                new XElement("book", new XAttribute("id", "1")),
                new XElement("article", new XAttribute("id", "2")),
                new XElement("book", new XAttribute("id", "3")),
                new XElement("magazine", new XAttribute("id", "4"))
                );

            var contentItems = from contentItem in content.Descendants()
                               select new ContentItem
                               {
                                   Id = contentItem.Attribute("id").Value
                                   Type = contentItem.ElementType() //PSEUDO-CODE
                               };

            foreach (var contentItem in contentItems)
            {
                Console.WriteLine(contentItem.Id);
            }

            Console.ReadLine();
        }
    }

    class ContentItem
    {
        public string Id { get; set; }
        public string Type { get; set; }
    }

}

Ответы [ 3 ]

4 голосов
/ 04 июня 2009

Вы хотите XElement.Name .

3 голосов
/ 04 июня 2009

Является ли XElement.Name тем, что вы ищете? (Используйте свойство XName.LocalName, чтобы затем получить локальную часть имени элемента.)

Если бы вы могли сказать, каким должен быть вывод, это помогло бы :) (я изначально думал, что вы имеете в виду тип узла (атрибут, элемент и т. Д.), Но он всегда будет XElement в вашем случае ...)

1 голос
/ 04 июня 2009

Попробуйте это:

var contentItems = from contentItem in content.Descendants()
                   select new ContentItem
                   {
                        Id = contentItem.Attribute("id").Value,
                        Type = contentItem.Name.LocalName
                   };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...