Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F# XML类型提供程序创建新XML对象失败_F#_Type Providers_F# Data - Fatal编程技术网

F# XML类型提供程序创建新XML对象失败

F# XML类型提供程序创建新XML对象失败,f#,type-providers,f#-data,F#,Type Providers,F# Data,我正在尝试为WebAPI 2.0文档合并两个XmlDocument.xmls。但是当我执行下面的代码时,它返回的没有错误。看起来我做的一切都对,所以我有点困惑。如果printf语句不正确,则它的结果值将失败。代码前后的工作似乎完美无瑕 #r "../packages/FSharp.Data.2.2.5/lib/net40/FSharp.Data.dll" #r "System.Xml.Linq.dll" open FSharp.Data open System.IO // Define you

我正在尝试为WebAPI 2.0文档合并两个
XmlDocument.xml
s。但是当我执行下面的代码时,它返回的
没有错误。看起来我做的一切都对,所以我有点困惑。如果
printf
语句不正确,则它的结果值将失败。代码前后的工作似乎完美无瑕

#r "../packages/FSharp.Data.2.2.5/lib/net40/FSharp.Data.dll"
#r "System.Xml.Linq.dll"
open FSharp.Data
open System.IO

// Define your library scripting code here

let seedPath = __SOURCE_DIRECTORY__ + "../../FieldOps/bin"
let outFile = __SOURCE_DIRECTORY__ + "../../FieldOps/App_Data/XmlDocument.xml"

type XmlDocument = XmlProvider<"""<?xml version="1.0"?>
<doc>
    <assembly><name>lala</name></assembly>
    <members>
        <member name="">
            <summary>lala</summary>
            <param name="">lala</param>
            <param name="">lala</param>
            <returns>lala</returns>
        </member>
        <member name=""></member>
    </members>
</doc>
""">

let xmlPaths =
    [
        "../bin/Release"
    ]

let seed = XmlDocument.Load(Path.Combine(seedPath, "XmlDocument.xml"))
let addFile path = Path.Combine(path, "XmlDocument.XML")
let loadXmlDoc (path: string) = XmlDocument.Load(path)
let joinXmlDocuments (acc: XmlDocument.Doc) path =
    let doc = (addFile >> loadXmlDoc) path
    let members = Array.append acc.Members doc.Members
    let result = new XmlDocument.Doc(acc.Assembly, members)
    printf "result -------------------  %A  --------------------" result
    result

let joinedDocs =
    xmlPaths
    |> List.fold (joinXmlDocuments) seed

let xml = joinedDocs.XElement.ToString()
File.WriteAllText(outFile, xml)
#r.。/packages/FSharp.Data.2.2.5/lib/net40/FSharp.Data.dll”
#r“System.Xml.Linq.dll”
打开FSharp.Data
开放系统
//在此处定义库脚本代码
让seedPath=\uuuuu源\目录\uuuuu+“../../FieldOps/bin”
let outFile=uuuu SOURCE_udirectory_uuuu+“../../FieldOps/App_Data/XmlDocument.xml”
类型XmlDocument=XmlProvider
让xmlPaths=
[
“./垃圾箱/释放”
]
让seed=XmlDocument.Load(Path.Combine(seedPath,“XmlDocument.xml”))
让addFile path=path.Combine(路径“XmlDocument.XML”)
让loadXmlDoc(路径:string)=XmlDocument.Load(路径)
让joinXmlDocuments(acc:XmlDocument.Doc)路径=
让doc=(addFile>>loadXmlDoc)路径
让members=Array.append acc.members doc.members
让结果=新的XmlDocument.Doc(acc.Assembly,members)
printf“结果-----------------%A-----------------”结果
结果
让我们一起来=
xmlPaths
|>List.fold(joinXmlDocuments)种子
让xml=joinedDocs.XElement.ToString()
File.WriteAllText(outFile,xml)

更新→ 我想我知道它为什么会有问题。可能是因为它们是不可变的,所以您需要创建一个新的。但是,我不知道如何轻松做到这一点

似乎
XmlProvider
无法识别自己的类型。不确定到底发生了什么。但是当我从头开始重新创建类型时,它不会返回我看到的空

下面是我最后做的:

let assembly = new XmlDocument.Assembly(acc.Assembly.Name)
let members =
    Array.append acc.Members doc.Members
    |> Array.map
        (
            fun x ->
            let parameters =
                x.Params
                |> Array.map (fun x -> new XmlDocument.Param(x.Name, x.Value))
            new XmlDocument.Member(x.Name, x.Summary, parameters, x.Returns)
        )
let result = XmlDocument.Doc(assembly, members)

这在F#Data 2.3.0-beta1中已修复,没有任何错误。它只是返回一个
,而不是所有的数据。