XNamespace + XName:类型'XName'与'string'类型不兼容

时间:2013-06-03 22:43:12

标签: .net f# linq-to-xml xname

我正在学习F#而我正在尝试编写一个简单的XML解析器。在C#中,我可以轻松地使用+运算符来组合命名空间和名称,但不能在F#中使用。我在下面的代码的最后一行收到以下错误:

Error   1   Type constraint mismatch. The type 
    XName    
is not compatible with type
    string    
The type 'XName' is not compatible with the type 'string'   

这是代码。编译器不喜欢“ns + d”。

let parse(pageResult: DownloadPageResult) =
    if pageResult.ErrorOccured then 0
    else 
        let reader = new StringReader(pageResult.Source)
        let doc = XDocument.Load(reader)
        let ns = XNamespace.Get("a")
        let d = XName.Get("entry")
        doc.Elements(ns + d) |> Seq.length

知道为什么我会看到这个吗?谢谢!

1 个答案:

答案 0 :(得分:2)

XNamespace.Addition operator需要XNamespacestring。编译器抱怨,因为您试图传递XName类型的变量(d),它期望string

如果您将最后一行更改为:

,它应该有效
doc.Elements(ns + d.LocalName) |> Seq.length

或者,正如Tomas指出的那样,您甚至不需要创建d变量,您可以直接使用该名称,如下所示:

doc.Elements(ns + "entry") |> Seq.length