gpt4 book ai didi

c# - 使用 LINQ to XML 时如何检查 XML 是否包含元素?

转载 作者:数据小太阳 更新时间:2023-10-29 01:53:54 26 4
gpt4 key购买 nike

给定这个结构:

 <root>
<user>
<userName>user1</userName>
<userImageLocation>/user1.png</userImageLocation>
</user>
<user>
<userName>user2</userName>
</user>
</root>

public class User
{
public string UserName {get; set; }
public string UserImageLocation {get; set; }
}

我使用 LINQ to XML 从 XML 文件中获取数据,如下所示:

XDocument document = XDocument.Parse(xmlFile);
List<User> listOfUsers =
(from user in document.Descendants("user")
select new User {
UserName = user.Element("userName"),
UserImageLocation = user.Element("userImageLocation"),
}
).ToList<User>();

我的问题是并非所有用户元素都包含 userImageLocation,当尝试读取 userImageLocation 时,它会抛出异常。

如何检查 XML 元素是否存在,如果存在,则读取它?

最佳答案

您当前的代码将无法编译,因为您正在尝试将 XElement 分配给字符串属性。我的猜测是您正在使用 XElement.Value 属性将其转换为字符串。取而代之的是,使用显式字符串转换,如果您在空 XElement 引用“上”调用它,它将返回 null:

XDocument document = XDocument.Parse(xmlFile);
List<User> listOfUsers =
(from user in document.Descendants("user")
select new User {
UserName = (string) user.Element("userName"),
UserImageLocation = (string) user.Element("userImageLocation"),
}
).ToList<User>();

请注意,这是使用点符号更具可读性的情况之一:

XDocument document = XDocument.Parse(xmlFile);
List<User> listOfUsers = document
.Descendants("user")
.Select(user => new User {
UserName = (string) user.Element("userName"),
UserImageLocation = (string) user.Element("userImageLocation") })
.ToList();

关于c# - 使用 LINQ to XML 时如何检查 XML 是否包含元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4301870/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com