Linq to XML,提取属性和元素

时间:2011-05-20 20:47:48

标签: c# xml linq

我是XML和Linq to XML的新手,我找不到一个很好的指南来解释如何使用它。我有一个简单的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>

我正在使用C#代码,如

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

提取itemtext对象的列表以供我的代码使用。我需要帮助的地方是提取节点元素的标题和图像属性列表。我还需要整体描述和itemdescription。我已经尝试了上述代码的每个变体替换Descendant for Elements,Element for Attribute等。我知道这可能是一个基本问题,但似乎没有一个直接的指导那里向初学者解释这个。

1 个答案:

答案 0 :(得分: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;