使用来自另一个模块的 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

问题:

您可以将样本分离到它们自己的文件中。

我是这样使用的

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 示例,因此它应该 可以满足您的需求。