从另一个模块使用XML-Typeprovider

时间:2018-12-12 08:15:22

标签: f# f#-data

我正在使用F#对XML文件进行分析。 由于代码量越来越大,我决定将代码分成不同的文件。

所以我创建了一个新文件,看起来像这样:

module Analyis

open FSharp.Data
open System

type someXml = XmlProvider<"someXMLFile.xml">

// Some Analysis functions down here

当我现在尝试使用另一个文件中的类型时,无法再找到应该由typeprovider生成的子类型:

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分为另一个文件?

1 个答案:

答案 0 :(得分:2)

您可以将样本分成各自的文件。

我以以下方式使用

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并通过构造函数调用as来获取实例

var info = new Info(myJsonString);

我的代码基于XML示例,因此应该满足您的需求。