Ошибка компиляции с жалобой на то, что значение не является функцией

Я пытаюсь поэкспериментировать в F# для одного из необходимых нам утилит, в котором мы хотим перелистать папку с файлами xml и найти определенный тег. Если найдено, вставьте еще один аналогичный тег вместе с ним. Наконец, выведите все имена файлов, для которых такие дополнительные теги были вставлены. Но я получаю ошибку компиляции, которую я не могу понять.

let configFile = 
    Directory.GetFiles(Path.Combine("rootdir", "relativepath"), @"*.xml")    
    |> Seq.map(fun configFileName -> 
                let xmlNavigator = XPathDocument(configFileName).CreateNavigator()
                let node = xmlNavigator.SelectSingleNode(@"Product/ABc[@type='xyz']")
                match node with
                | null -> "not configuration present"
                | _ -> 
                    let nodeAppender() = node.InsertAfter("<Risk type=""abc1"" methodology=""xyz1""/>")
                    let parentNode = node.SelectAncestors(XPathNodeType.Root, false)
                    parentNode.Current.OuterXml)        
    |> Seq.iter (printfn "%s")

Ошибка компиляции, как показано ниже:

This value is not a function and cannot be applied

2 ответа

Решение

Ваша строка экранирована неправильно. Так должно быть:

node.InsertAfter("<Risk type=\"abc1\" methodology=\"xyz1\"/>")

РЕДАКТИРОВАТЬ: Очевидно, я печатал это, как Брайан опубликовал свой ответ. Либо экранирование каждого символа котировки, либо префикс с @ как будет работать.

Было бы полезно указать, в какой строке / столбце находится место ошибки.

На первый взгляд, в nodeAppender, похоже, что вы остановились @ на строковом литерале, что означает, что это пять строк подряд (а не одна строка с экранированными кавычками), что может быть причиной ошибки.

Другие вопросы по тегам