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
Другие вопросы по тегам