我已经在网上搜索了关于此的 linq 解决方案,但我找不到任何非常相似的解决方案。
谁能告诉我如何从下面的xml中选择comformation元素?我想在 c# 中使用 linq 将每个组件(id、accountnumber、type)添加到对象中。
实际上,我想一次获取一堆/记录中的数据,然后将其添加到列表中。我究竟做错了什么?
XML
string batch = @"
<batchresult>
<outputs>
<output>
<value>
<conformation>
<component>
<name>cmdinfo</name>
<value>
<bundle>
<data>
<value>
<state>100</state>
</value>
</data>
</bundle>
</value>
</component>
<component>
<name>resultlist</name>
<value>
<bundle>
<data>
<value>
<conformation>
<component>
<name>id</name>
<value>
<state>1</state>
</value>
</component>
<component>
<name>accountnumber</name>
<value>
<string>10505749</string>
</value>
</component>
<component>
<name>type</name>
<value>
<string>subnumber</string>
</value>
</component>
</conformation>
</value>
<value>
<conformation>
<component>
<name>id</name>
<value>
<state>2</state>
</value>
</component>
<component>
<name>accountnumber</name>
<value>
<string>53871265</string>
</value>
</component>
<component>
<name>type</name>
<value>
<string>subnumber</string>
</value>
</component>
</conformation>
</value>
</data>
</bundle>
</value>
</component>
<component>
<name>batchnumber</name>
<value>
<bundle>
<data>
<value>
<state>14512367</state>
</value>
</data>
</bundle>
</value>
</component>
</conformation>
</value>
</output>
</outputs>
</batchresult>";
代码
class record
{
string F1 = "";
public string f1
{
set { F1 = value; }
get { return F1; }
}
string F2 = "";
public string f2
{
set { F2 = value; }
get { return F2; }
}
string F3 = "";
public string f3
{
set { F3 = value; }
get { return F3; }
}
}
private void button1_Click(object sender, EventArgs e)
{
XDocument xmldoc = XDocument.Parse(batch);
var obj = from o in xmldoc.Descendants("component")
where o.Parent.Name == "conformation"
//select new record { f1 = o.Element("name").Value, f2 = o.Element("value").Value, f3 = o.Element("value").Value };
select new record { f1 = o.Element("id").Value, f2 = o.Element("accountnumber").Value, f3 = o.Element("type").Value };
foreach (var d in obj)
{
record myobj = new record();
myobj.f1=d.f1;//the first object will contain 1
myobj.f2=d.f2; //10505749
myobj.f3=d.f3;//subnumber .. and so on
mylist.Add(myobj);
}
}
嗨,我没有尝试反序列化,我会检查一下。你们中的一个人使用此代码发布的示例:
XElement doc = XElement.Parse(batch);
doc.Descendants("conformation").Elements("component").Select(x =>
new record
{
f1 = x.First().Element("name").Value,
f2 = x.Skip(1).First().Element("name").Value,
f3 = x.Skip(2).Element("name").Value
};
..给我以下错误:
错误 15“System.Xml.Linq.XElement”不包含“First”的定义,并且找不到接受“System.Xml.Linq.XElement”类型的第一个参数的扩展方法“First”(您是否缺少使用指令还是程序集引用?)
怎么来的?