Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.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# 使用LINQ查找具有特定属性名称和值的XElement_C#_Xml_Linq_Xelement - Fatal编程技术网

C# 使用LINQ查找具有特定属性名称和值的XElement

C# 使用LINQ查找具有特定属性名称和值的XElement,c#,xml,linq,xelement,C#,Xml,Linq,Xelement,XML响应部分的示例: comm.Parameters.AddWithValue("LargeImage", elm.Descendants("image") .FirstOrDefault(i => (string)i.Attribute("size") == "large").Value); 3264699 铁与酒 铁与酒 约翰博士 铁与酒 8915382 拉维尼亚音乐节 高地公园 美国 拉维尼亚公园路200号 60035 42.15831 -87.77840

XML响应部分的示例:

comm.Parameters.AddWithValue("LargeImage",
    elm.Descendants("image")
       .FirstOrDefault(i => (string)i.Attribute("size") == "large").Value);

3264699
铁与酒
铁与酒
约翰博士
铁与酒
8915382
拉维尼亚音乐节
高地公园
美国
拉维尼亚公园路200号
60035
42.15831
-87.778409
http://www.last.fm/venue/8915382+拉维尼亚+节日
http://www.ravinia.org/
847.266.5100
http://userserve-ak.last.fm/serve/34/63026487.jpg
http://userserve-ak.last.fm/serve/64/63026487.jpg
http://userserve-ak.last.fm/serve/126/63026487.jpg
http://userserve-ak.last.fm/serve/252/63026487.jpg
试试看

从C#6.0(VS 2015)开始,你可以写:

XElement result = elm.Descendants("image")
   .FirstOrDefault(el => el.Attribute("size") != null &&
                         el.Attribute("size").Value == "large");
if (result != null) {
    process result.Value ...
}
一个不明显的替代方法(正如@RandRandom指出的)是将属性强制转换为
string

XElement result = elm.Descendants("image")
   .FirstOrDefault(el => el.Attribute("size")?.Value == "large");
if (result != null) {
    process result.Value ...
}
这是可行的,因为。

您可以使用


那么,有什么问题?这似乎很好,但这取决于
elm
是什么(您不会显示如何从xDocument到elm)。当找不到具有该属性的元素时,您将得到
NullReferenceException
。由于某种原因,这在一开始不起作用,但现在效果很好!你可以这样写来代替?.Value或.Value:(string)el.Attribute(“size”)=“large”(适用于所有版本)惊人的答案!。已测试并适用于.NET Core/.NET标准1.6!
XElement result = elm.Descendants("image")
   .FirstOrDefault(el => el.Attribute("size") != null &&
                         el.Attribute("size").Value == "large");
if (result != null) {
    process result.Value ...
}
XElement result = elm.Descendants("image")
   .FirstOrDefault(el => el.Attribute("size")?.Value == "large");
if (result != null) {
    process result.Value ...
}
XElement result = elm.Descendants("image")
   .FirstOrDefault(el => (string)el.Attribute("size") == "large");
if (result != null) {
    process result.Value ...
}
var node = elm.XPathSelectElement("descendant::image[@size='large']");
if (node!=null)
{
    var path = node.Value;
}