Использование XML-Typeprovider из другого модуля - PullRequest
0 голосов
/ 12 декабря 2018

Я делаю анализ XML-файла, используя F #.Так как объем кода увеличился, я решил разделить свой код на несколько файлов.

Итак, я создал новый файл, который выглядит примерно так:

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 голосов
/ 12 декабря 2018

Вы можете разделить образцы в их собственные файлы.

Я использую его следующим образом

module infoParser =

    open FSharp.Data

    type jsonProvider = JsonProvider<"./schemaSamples/fileSchema.json", EmbeddedResource="Parsers, fileschema.json">

    type Info (textJsonIn: string) =
        let parsedInfo = jsonProvider.Parse(textJsonIn)

Теперь вы можете создать «экземпляр» Info и получить доступ к полям.

В моем случае я использую infoParser из класса C # и получаю экземпляр с помощью вызова конструктора как

var info = new Info(myJsonString);

Я основал свой код на примере XML, поэтому он должен будет в порядке для ваших нужд.

...