C# Linq到XML C子体:如何读取具有相同名称的属性?
我在网上搜索,找到了很多答案,但都是针对某个特定的班级,或者是以另一种方式写的 我有以下XML响应: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">
<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++;
}