C# Linq到XML C子体:如何读取具有相同名称的属性?

C# Linq到XML C子体:如何读取具有相同名称的属性?,c#,xml,linq,linq-to-xml,C#,Xml,Linq,Linq To Xml,我在网上搜索,找到了很多答案,但都是针对某个特定的班级,或者是以另一种方式写的 我有以下XML响应: <return xsi:type="ns1:PlentySoapResponse_GetItemsBase"> <ItemsBase xsi:type="ns1:ArrayOfPlentysoapobject_itembase"> <item xsi:type="ns1:PlentySoapObject_ItemBase">

我在网上搜索,找到了很多答案,但都是针对某个特定的班级,或者是以另一种方式写的

我有以下XML响应:

<return xsi:type="ns1:PlentySoapResponse_GetItemsBase">
        <ItemsBase xsi:type="ns1:ArrayOfPlentysoapobject_itembase">
           <item xsi:type="ns1:PlentySoapObject_ItemBase">
              <ItemID xsi:type="xsd:int">2</ItemID>
              <ItemNo xsi:type="xsd:string"/>
               ............. 
              <DeepLink xsi:type="xsd:string">/a-2/</DeepLink>
           </item>
           <item xsi:type="ns1:PlentySoapObject_ItemBase">
              <ItemID xsi:type="xsd:int">4</ItemID>
              <ItemNo xsi:type="xsd:string"/>
我是这样读的:

XDocument loaded = XDocument.Parse(readString);
            for (int i = 0; i < 50; i++)
            {
            var items = from x in loaded.Descendants("return")
                                select new 
                                {
                                    ItemID = x.Descendants("ItemID").First().Value,
                                    Name = x.Descendants("Name").First().Value,
                                    EKnet = x.Descendants("PurchasePriceNet").First().Value
                                };

                foreach (var x in items)
                {
                    item[i, 0] = x.ItemID.ToString();
                    item[i, 1] = x.Name.ToString();
                    item[i, 2] = x.EKnet.ToString();
                }
            }
        else
        {
            MessageBox.Show("Wrong XML Call");
        }
        return item;
      }
但我总是得到相同的物品属性

有没有一种简单的方法来获取下一个项目属性? 我读过一个带有IEnumerable的exmaple,但它总是使用一个我不想使用的特定类

非常感谢

编辑:

试试这个:

        XDocument loaded = XDocument.Parse(readString);
        var items = loaded
                    .Descendants("return")
                    .FirstOrDefault()
                    .Element("ItemsBase")
                    .Elements("item");
        int i = 0;
        foreach (var _item in items)
        {
            item[i, 0] = _item.Element("ItemID").Value;
            item[i, 1] = _item.Element("Texts").Element("Name").Value;
            item[i, 2] = _item.Element("PriceSet").Element("PurchasePriceNet").Value;
            i++;
        }

“\ItemsBase\Item”不起作用。我尝试获取所有其他50个项目,以及加载的项目。XPathSelectElements不会在我的XDocument Loaded中删除我尝试了我们的代码,而是选择new{ItemID=itm.DegenantSiteMid.First.Value};和foreach…{item[i,0]=itm.ItemID.ToString;}调用一个错误,该错误表明序列中没有元素。什么是readString变量的内容?string readString=send_recvdocument;使用该代码,我得到一个错误:System.nullreferenceexception对象引用未设置为行项[i,1]=\u item.ElementName.Value中对象的实例;名称可能并不总是在返回的xml中?在你的问题中,你确实使用了Name,它来自哪里?是的,Name是其中的一部分,这可能意味着没有找到名为Name的元素。是否有可能名为item的元素并不总是有名为ItemID、Name、PurchasePriceNet的子元素?项是否是多维数组,如对象[,]项?若并没有名为Name的元素,那个么它在数组中的位置是否应该保持为空?Name始终是文本的子元素。并向项的子项发送文本。项是多维数组。Name元素总是被填充的。我认为唯一的问题是名字对文本来说是个孩子
XDocument xdoc = XDocument.Parse(xml);
        var items = from ret in xdoc.Descendants("return")
                    from itb in ret.Descendants("ItemsBase")
                    from item in itb.Descendants("item")
                    select new {item};

        foreach (var item in items)
        {
            // do what you want with item,
        }
        XDocument loaded = XDocument.Parse(readString);
        var items = loaded
                    .Descendants("return")
                    .FirstOrDefault()
                    .Element("ItemsBase")
                    .Elements("item");
        int i = 0;
        foreach (var _item in items)
        {
            item[i, 0] = _item.Element("ItemID").Value;
            item[i, 1] = _item.Element("Texts").Element("Name").Value;
            item[i, 2] = _item.Element("PriceSet").Element("PurchasePriceNet").Value;
            i++;
        }