C# 使用XDocument按属性查找元素
此查询似乎有效,但我有0个结果C# 使用XDocument按属性查找元素,c#,xml,linq,linq-to-xml,C#,Xml,Linq,Linq To Xml,此查询似乎有效,但我有0个结果 IEnumerable<XElement> users = (from el in XMLDoc.Elements("Users") where (string)el.Attribute("GUID") == userGUID.ToString() select el); IEnumerable用户= (来自XMLDoc.Elements(“用户”)中的el) 其中(字符串)
IEnumerable<XElement> users =
(from el in XMLDoc.Elements("Users")
where (string)el.Attribute("GUID") == userGUID.ToString()
select el);
IEnumerable用户=
(来自XMLDoc.Elements(“用户”)中的el)
其中(字符串)el.Attribute(“GUID”)==userGUID.ToString()
选择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>
...
你有什么线索可以解释这一点吗?将第二行的
用户
更改为用户
。像这样:
IEnumerable<XElement> users = (from el in XMLDoc.Root.Elements("User")
where (string)el.Attribute("GUID") == userGUID.ToString()
select el);
IEnumerable users=(来自XMLDoc.Root.Elements(“用户”)中的el)
其中(字符串)el.Attribute(“GUID”)==userGUID.ToString()
选择el);
我假设XMLDoc是一个XDocument,而不是根元素本身。嗯,Users元素没有GUID属性。建议的两种选择:
- 查看
XDocument.Root.Elements(“用户”)
- 使用
查找所有用户元素子体(“用户”)
IEnumerable<XElement> users =
(from el in XMLDoc.Root.Elements("User")
where (string) el.Attribute("GUID") == userGUID.ToString()
select el);
但是这里没有太多的理由使用查询表达式。。。您所应用的只是一个谓词。让我们直接使用Where
方法:
IEnumerable<XElement> users =
XMLDoc.Root
.Elements("User")
.Where(el => (Guid) el.Attribute("GUID") == userGUID);
谢谢,这部分是我需要的,我犯了一个愚蠢的错误。正如乔恩在下面指出的,选择正确的类型是更好的选择。此外,如果您使用“el.Attribute(“GUID”).Value”,您会自动获得一个字符串作为返回类型,并且不需要强制转换。
root
应该是XMLDoc.root.Elements(“User”)
中的root
。我知道这是一篇较旧的文章,但不应该是“where el.Attribute(“GUID”).Value==userGUID.ToString()'假设userGUID是一个GUID?我如何使用Sharepoint\u api
提要实现同样的效果?我想从每个父元素中获得多个子元素?谢谢,这也很有用,可惜我只能将其中一个标记为正确。
IEnumerable<XElement> users =
XMLDoc.Root
.Elements("User")
.Where(el => (Guid) el.Attribute("GUID") == userGUID);
IEnumerable<XElement> users = XMLDoc.Root
. etc
IEnumerable<XElement> users =
XMLDoc.Root
.Elements("User")
.Where(el => (Guid?) el.Attribute("GUID") == userGUID);