0

必要なユーティリティ ツールの 1 つを 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では、文字列リテラルを省略したように見えます@。つまり、(引用符で囲まれた1つの文字列ではなく)5つの文字列が連続しているため、エラーの原因である可能性があります。

于 2012-07-11T15:36:26.413 に答える