在XDocument中查找元素

时间:2019-12-04 14:10:34

标签: c# .net xml linq-to-xml

我有这个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

我如何获得第三个元素?

1 个答案:

答案 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();