Linq to XML,提取属性和元素

本文关键字:属性 元素 提取 to XML Linq | 更新日期: 2023-09-27 17:57:01

我是XML和Linq到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 对象的列表。我需要帮助的地方是提取节点元素的标题和图像属性列表。我还需要整体描述和项目描述。我已经尝试了上述代码的所有变体,将后代替换为元素,将元素替换为属性等。我知道这可能是一个基本问题,但似乎没有一个直接的指南来向初学者解释这一点。

Linq to XML,提取属性和元素

获取字幕

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