c#:无法从XML中检索属性值

本文关键字:检索 属性 XML | 更新日期: 2023-09-27 18:17:58

这是我想要更新的XML文档,但是为了这样做,首先,我需要获得其中一个节点的id。

<?xml version="1.0" encoding="utf-8"?>
  <backupatmail>
    (... backups with id 0 & 1)
    <backup id="2">
      <foldername>Dwa</foldername>
      <backupdate>16/10/2015</backupdate>
      <comment>comment will be set on UI</comment>
      <numberofparts>1</numberofparts>
      <lastsucceed></lastsucceed>
    </backup>
    (... backups with id 3 & 4)
  </backupatmail>

我写的是:

public static int GetSpecificBackupID(XDocument xdoc, string folderName)
    {
        int lastId = (int)xdoc.Descendants("backup").Where(e => e.Attribute("foldername").Value.Equals(folderName)).Single().Attribute("id");
        return lastId;
    }

但是我经常得到一个未处理的类型为'System '的异常。"得到NullReferenceException发生 .

你能指出那个明显的问题吗?: -)

另一件事是(我们称之为奖金问题):

如何在上面的方法中添加另一个"where"条件?我需要非常确定id,所以我考虑检查foldername属性

c#:无法从XML中检索属性值

foldername不是属性-它是一个元素。这就是为什么你在e.Attribute("foldername").Value这里得到NullReferenceException。正确的查询是

int lastId = (int)xdoc.Descendants("backup")
    .Where(b => (string)b.Element("foldername") == folderName)
    .Single().Attribute("id");

BTW您可以使用重载的Single操作符并删除Where:

int id = (int)xdoc.Descendants("backup")
        .Single(b => (string)b.Element("foldername") == foldername)
        .Attribute("id");