gpt4 book ai didi

c# - 使用 XDocument 按属性查找元素

转载 作者:IT王子 更新时间:2023-10-29 04:22:36 25 4
gpt4 key购买 nike

此查询似乎有效,但我有 0 个结果。

IEnumerable<XElement> users =
(from el in XMLDoc.Elements("Users")
where (string)el.Attribute("GUID") == userGUID.ToString()
select el);

我的 XML 如下:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Users>
<User GUID="68327fe2-d6f0-403b-a7b6-51860fbf0b2f">
<Key ID="F7000012ECEAD101">
...
</Key>
</User>

</Users>

您有任何线索可以阐明这一点吗?

最佳答案

嗯,Users 元素没有 GUID 属性。两个建议的选项:

  • 查看XDocument.Root.Elements("User")
  • 使用Descendants("User")查找所有用户元素。

我暂时坚持使用前者。这给了我们:

IEnumerable<XElement> users =
(from el in XMLDoc.Root.Elements("User")
where (string) el.Attribute("GUID") == userGUID.ToString()
select el);

现在,我们仍然可以进一步整理它。首先,让我们转换到Guid而不是 string :

IEnumerable<XElement> users =
(from el in XMLDoc.Root.Elements("User")
where (Guid) el.Attribute("GUID") == userGUID
select el);

然而,没有太多理由在这里使用查询表达式……您所应用的只是一个谓词。让我们只使用 Where直接方法:

IEnumerable<XElement> users = 
XMLDoc.Root
.Elements("User")
.Where(el => (Guid) el.Attribute("GUID") == userGUID);

当然,如何布局取决于您:) 如果行较长,您可能可以将所有内容对齐在较长的第一行下:

IEnumerable<XElement> users = XMLDoc.Root
. etc

现在,最后 - 如果 User 元素没有 GUID 属性怎么办?目前,这段代码会抛出一个异常。这可能正是您想要的——也可能不是。如果不是,您可以通过转换为 Nullable<Guid> 使其忽略这些事情又名 Guid?相反:

IEnumerable<XElement> users = 
XMLDoc.Root
.Elements("User")
.Where(el => (Guid?) el.Attribute("GUID") == userGUID);

关于c# - 使用 XDocument 按属性查找元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2678251/

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