2009-06-04 3 views
0

LINQを使って、いくつかのXMLから4つの要素が得られ、各要素は異なる名前(ブック、雑誌、記事)を持つことができます。LINQ-to-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

はあなたが後にしている何XElement.Nameですか?

出力が欲しいと言うことができれば、それは助けになります:)(私はもともと、あなたがtype of node(属性、要素)を意味していると思っていました。など)が、それは常にあなたのケースでXElementだろう...)

+0

無修正の場合は、XNode.NodeType! :p – Randolpho

+0

@Randolpho:はい、私はもともとは、 "type"という単語を繰り返し使用しているため、必要とされていたノードタイプだと思っていました。私はそれをさらに編集に含めて、それが見たい人がまだそれを見てもらうようにしました。 Upvoteあなたの答えも同様:) –

+0

それはちょうど "Name.ToString()"です。私はXmlReaderのNodeTypeなどのように "タイプ"の面で考えていた。ありがとう。 –

1

これを試してみてください:

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