.net XNamespace+;XName:type';XName';与类型';字符串';
我正在学习F#,并试图编写一个简单的XML解析器。在C#中,我可以轻松地使用+运算符组合名称空间和名称,但在F#中则不行。我在下面代码的最后一行遇到以下错误:.net XNamespace+;XName:type';XName';与类型';字符串';,.net,f#,linq-to-xml,xname,.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' 这是代
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”
知道我为什么会看到这个吗?谢谢 采用XNamespace
和字符串。编译器正在抱怨,因为您试图传递一个XName
类型的变量(d
),而它需要一个字符串
如果您将最后一行更改为:
doc.Elements(ns + d.LocalName) |> Seq.length
或者,正如Tomas指出的,您甚至不需要创建d
变量,您可以直接使用名称,如下所示:
doc.Elements(ns + "entry") |> Seq.length
+1顺便说一句:在这种情况下,您可能只需编写ns+“entry”
,因为XName
值d
是在前一行构造的(没有明显的原因…)@TomasPetricek,您完全正确——我已将其添加到我的答案中。另外,如果您正在解析具有相当静态结构的XML文件(而且您有一个很好的示例输入),然后您可以尝试使用F#Data中的XML类型提供程序:这可能会让您的生活更轻松!
doc.Elements(ns + "entry") |> Seq.length