2009-06-04 5 views
0

Avec LINQ, j'obtiens quatre éléments de XML, chaque élément peut avoir un nom différent (Book, Magazine, Article).Comment puis-je obtenir le type d'élément traité par LINQ-to-XML?

Comment obtenir le nom de l'élément que je suis en train de traiter, par ex. quelque chose comme ElementType() ci-dessous:

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; } 
    } 

} 

Répondre

3

est XElement.Name ce que vous êtes après? (Utilisez la propriété XName.LocalName pour obtenir la partie locale du nom de l'élément.)

Si vous pouviez dire ce que vous voulez que la sortie soit, cela aiderait :) (Je pensais à l'origine que vous vouliez dire le type of node (attribut, élément etc), mais il sera toujours XElement dans votre cas ...)

+0

Yay pour les modifications silencieuses, Mr. XNode.NodeType! : p – Randolpho

+0

@Randolpho: Oui, à l'origine, je pensais que c'était le type de nœud qui était nécessaire, étant donné l'utilisation répétée du mot "type". J'ai inclus cela dans une autre édition afin que quiconque qui le veut puisse le voir. Upvote pour votre réponse aussi bien :) –

+0

C'est juste "Name.ToString()". Je pensais en termes de "Type" comme dans NodeType de XmlReader, etc. merci. –

1

Essayez ceci:

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