2011-05-20 110 views
1

我是XML和Linq到XML的新手,我无法找到解释如何使用它的很好的指南。我有一个结构简单的XML字符串如下Linq到XML,提取属性和元素

<mainitem> 

    <items> 
    <itemdescription>ABC</itemdescription> 
    <item> 
     <itemtext>XXX</itemtext> 
    </item> 
    <item> 
     <itemtext>YYY</itemtext> 
    </item> 
    <item> 
     <itemtext>ZZZ</itemtext> 
    </item> 
    </items> 

    <overalldescription>ABCDEFG</overalldescription> 
    <itemnodes> 
    <node caption="XXX" image="XXX"></node> 
    <node caption="YYY" image="YYY"></node> 
    <node caption="ZZZ" image="ZZZ"></node> 
    </itemnodes> 
</mainitem> 

我使用像

var Items = (from xElem in XMLCODEABOVE.Descendants("item") 
       select new ItemObject 
       { 
        ItemObjectStringProperty = xElem.Element("itemtext").Value, 
       } 
      ); 

C#代码来提取itemtext对象的列表与我的代码使用。我需要帮助的是提取节点元素的标题和图像属性列表。我也需要整体描述和项目描述。我已经尝试了上述代码的所有变体,用Descendant代替元素,元素代表属性等。我知道这可能是一个基本问题,但似乎没有一个简单的向导来向初学者解释这一点。

回答

2

为了让字幕

// IEnumerable<string> 
var captions = from node in doc.Descendants("node") 
       select node.Attribute("caption").Value; 

或两个标题和一个拍摄图像属性:

// IEnumerable of the anonymous type 
var captions = from node in doc.Descendants("node") 
       select new { 
        caption = node.Attribute("caption").Value, 
        image = node.Attribute("image").Value 
       }; 

对于描述:

// null ref risk if element doesn't exist 
var itemDesc = doc.Descendants("itemdescription").FirstOrDefault().Value; 
var overallDesc = doc.Descendants("overalldescription ").FirstOrDefault().Value;