我正在尝试在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
答案 0 :(得分:2)
您的字符串未正确转义。它应该是:
node.InsertAfter("<Risk type=\"abc1\" methodology=\"xyz1\"/>")
编辑:显然我正在键入这个,因为Brian发布了他的答案。无论是转义每个引用字符还是以@
为前缀都可以正常工作。
答案 1 :(得分:1)
有助于指出错误位置所在的行/列。
乍一看,在nodeAppender中,它看起来就像你在字符串文字上的@
一样,这意味着它连续五个字符串(而不是一个带有转义引号的字符串),这可能是错误的原因。