XNamespace + XName: тип 'XName' не совместим с типом 'string'
Я изучаю 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 ответ
Решение
Оператор XNamespace.Addition принимает XNamespace
и string
, Компилятор жалуется, потому что вы пытаетесь передать XName
переменная (d
) где он ожидает string
,
Это должно работать, если вы измените свою последнюю строку на:
doc.Elements(ns + d.LocalName) |> Seq.length
Или, как указывает Томас, вам даже не нужно создавать d
переменная, вы можете просто использовать имя напрямую, например так:
doc.Elements(ns + "entry") |> Seq.length