我有这个xml:
<List>
<Element>
<ID>1</ID>
<property>19</property>
</Element>
<Element>
<ID>2</ID>
<property>11</property>
</Element>
<Element>
<ID>3</ID>
<property>5</property>
</Element>
</List>
不,我不喜欢我的代码为我提供ID为3的元素。
我尝试过:
var node = doc.Descendants().Where(n => n.Elements().Where(x=>x.Name == id.ToString()).FirstOrDefault()!=null).FirstOrDefault();
但是发生了此异常:
在System.Private.Xml.dll中发生类型为'System.Xml.XmlException'的异常,但未在用户代码中处理 名称不能以“ 3”字符开头,十六进制值为0x33
我如何获得第三个元素?
答案 0 :(得分:0)
这是因为您正在将XMLElement的名称与id
进行比较,并且XML规范指出元素的名称不能以数字开头。因此,与其比较名称,不如比较它的值:
var node = doc.Descendants()
.Where(n => n.Elements()
// I Changed 'x.Name' to 'x.Value' here
.Where(x => x.Value == id.ToString())
.FirstOrDefault()!=null)
.FirstOrDefault();