2011-05-20 186 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;