Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用XDocument按属性查找元素_C#_Xml_Linq_Linq To Xml - Fatal编程技术网

C# 使用XDocument按属性查找元素

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) 其中(字符串)

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

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);