如何获取LINQ-to-XML处理的元素类型?

时间:2009-06-04 14:29:41

标签: c# xml linq

使用LINQ我从一些XML中获取了四个元素,每个元素可以有不同的名称(Book,Magazine,Article)。

如何获取我正在处理的元素的名称,例如类似下面的 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 个答案:

答案 0 :(得分:4)

你想要XElement.Name

答案 1 :(得分:3)

XElement.Name你追求的是什么? (使用XName.LocalName属性然后获取元素名称的本地部分。)

如果你能说出你想要的输出,那会有所帮助:)(我原本认为你的意思是type of node(属性,元素等),但它总是XElement在你的情况下...)

答案 2 :(得分:1)

试试这个:

var contentItems = from contentItem in content.Descendants()
                   select new ContentItem
                   {
                        Id = contentItem.Attribute("id").Value,
                        Type = contentItem.Name.LocalName
                   };