gpt4 book ai didi

.net - 只有我吗?与 XPath 相比,我发现 LINQ to XML 有点麻烦

转载 作者:行者123 更新时间:2023-12-03 15:26:14 26 4
gpt4 key购买 nike

我是一名 C# 程序员,所以我无法利用 VB 中很酷的 XML 语法。

Dim itemList1 = From item In rss.<rss>.<channel>.<item> _
Where item.<description>.Value.Contains("LINQ") Or _
item.<title>.Value.Contains("LINQ")

使用 C#,我发现 XPath比使用 LINQ to XML 执行多嵌套选择更容易思考、更容易编码、更容易理解.看看这个语法,它看起来像希腊脏话:
var waypoints = from waypoint in gpxDoc.Descendants(gpx + "wpt") 
select new
{
Latitude = waypoint.Attribute("lat").Value,
Longitude = waypoint.Attribute("lon").Value,
Elevation = waypoint.Element(gpx + "ele") != null ?
waypoint.Element(gpx + "ele").Value : null,
Name = waypoint.Element(gpx + "name") != null ?
waypoint.Element(gpx + "name").Value : null,
Dt = waypoint.Element(gpx + "cmt") != null ?
waypoint.Element(gpx + "cmt").Value : null
};

所有的转换,繁重的语法,NullPointerExceptions 的可能性。 XPath 不会发生这些。

我一般喜欢 LINQ,我在对象集合和数据库上使用它,但是我第一次查询 XML 使我又回到了 XPath。

只有我吗?

我错过了什么吗?

编辑 :有人投票将其作为“不是一个真正的问题”来结束。但这是一个真实的问题,明确说明。问题是:我是不是误会了
LINQ to XML 的东西?

最佳答案

是的,你给出的例子是笨拙的。

但是 LINQ 带来了重构的灵活性。

这是我将如何改进它的示例。 (这是在没有任何测试的情况下完成的,我什至不知道真正的类名,但它应该传达这个想法)

static class LinqXmlExtension
{
public static NodeThingy ElementOrNull(this XmlElement ele, string searchString)
{
return (ele.Element(searchString) != null ? ele.Element(searchString).Value : null);
}
}

//
/////////////////////////////////////////////////////////////////

var waypoints = from waypoint in gpxDoc.Descendants(gpx + "wpt")
select new
{
Latitude = waypoint.Attribute("lat").Value,
Longitude = waypoint.Attribute("lon").Value,
Elevation = waypoint.ElementOrNull(gpx + "ele"),
Name = waypoint.ElementOrNull(gpx + "name"),
Dt = waypoint.ElementOrNull(gpx + "cmt")
};

关于.net - 只有我吗?与 XPath 相比,我发现 LINQ to XML 有点麻烦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1442585/

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