0

我正在尝试在 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
4

2 回答 2

2

您的字符串转义不正确。它应该是:

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

编辑:显然我在布赖恩发布他的答案时输入了这个。转义每个引号字符或按@原样添加前缀都可以。

于 2012-07-11T15:38:19.440 回答
1

这将有助于指出错误位置在哪一行/哪一列。

乍一看,在 nodeAppender 中,您似乎忽略@了字符串文字,这意味着它是连续五个字符串(而不是一个带有转义引号的字符串),这可能是错误的原因。

于 2012-07-11T15:36:26.413 回答