我正在使用F#对XML文件进行分析。由于代码量越来越大,我决定将代码拆分成不同的文件。
所以我创建了一个新的文件,看起来像这样:
module Analyis
open FSharp.Data
open System
type someXml = XmlProvider<"someXMLFile.xml">
// Some Analysis functions down here
当我现在尝试使用另一个文件中的类型时,应该由类型提供者生成的子类型再也找不到了:
open Analysis
let importantFunction (data:someXml) =
let thisDoesNotWork = data.someProperty
// more code
只有当我加载函数内部的数据时,它才有效,如下所示:
open Analysis
let importantFunction =
let data = someXml.GetSample()
let nowItWorks = data.someProperty
// more code
问题:
有没有具体的原因,为什么这不起作用?
如何以"正确"的方式将XmlType分离到另一个文件中?
您可以将样本分离到各自的文件中。
我以以下方式使用
module infoParser =
open FSharp.Data
type jsonProvider = JsonProvider<"./schemaSamples/fileSchema.json", EmbeddedResource="Parsers, fileschema.json">
type Info (textJsonIn: string) =
let parsedInfo = jsonProvider.Parse(textJsonIn)
现在,您可以创建一个信息"实例"并访问字段。
在我的例子中,我使用C#类中的infoParser,并通过作为的构造函数调用获得实例
var info = new Info(myJsonString);
我的代码基于一个XML示例,因此应该可以满足您的需求。