首页 > 解决方案 > 在 XDocument 中查找元素

问题描述

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

如何获得第三个元素?

标签: c#.netxmllinq-to-xml

解决方案


这是因为您将 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();

推荐阅读