F# XML类型提供程序创建新XML对象失败
我正在尝试为WebAPI 2.0文档合并两个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
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中已修复,没有任何错误。它只是返回一个
,而不是所有的数据。