使用来自另一个模块的 XML-Typeprovider
Using XML-Typeprovider from another Module
我正在使用 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
问题:
是否有具体原因,为什么这不起作用?
如何 "correct" 将 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)
现在您可以创建信息 "instance" 并访问字段。
在我的例子中,我使用 C# 中的 infoParser class 并通过构造函数调用获取实例
var info = new Info(myJsonString);
我的代码基于 XML 示例,因此它应该 可以满足您的需求。
我正在使用 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
问题:
是否有具体原因,为什么这不起作用?
如何 "correct" 将 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)
现在您可以创建信息 "instance" 并访问字段。
在我的例子中,我使用 C# 中的 infoParser class 并通过构造函数调用获取实例
var info = new Info(myJsonString);
我的代码基于 XML 示例,因此它应该 可以满足您的需求。