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

标签 .net linq xpath linq-to-xml

我是一名 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/

相关文章:

c# - 如何在ItemsControl中显示弹出窗口

c# - EF Core 查询 - 有没有办法按字母顺序查找下一个和上一个项目?

c# - 使用 Func<Inner,Outer,bool> 的 Linq GroupJoin?

java - jdk1.4中使用Xpath解析XML文件

.net - 无法将 'CustomTransform' 解析为一种转换

.net - 如何让主动服务高可用?

c# - 如何获取 XML 或 XElement 变量中的特定元素计数

python - XPath和Scrapy-当标签的深度和数量不一致时,会取消链接

c# - 将自定义 SOAP/XML 反序列化为对象

c# - 如何在不使用对话框的情况下在 C# 项目中为 MySQL 数据库设置连接字符串?