我正在学习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
知道为什么我会看到这个吗?谢谢!
答案 0 :(得分:2)
XNamespace.Addition operator需要XNamespace
和string
。编译器抱怨,因为您试图传递XName
类型的变量(d
),它期望string
。
如果您将最后一行更改为:
,它应该有效doc.Elements(ns + d.LocalName) |> Seq.length
或者,正如Tomas指出的那样,您甚至不需要创建d
变量,您可以直接使用该名称,如下所示:
doc.Elements(ns + "entry") |> Seq.length