Использование XML-Typeprovider из другого модуля
Я делаю анализ на 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 ответ
Вы можете разделить образцы в свои собственные файлы.
Я использую это следующим образом
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, поэтому он должен быть в порядке для ваших нужд.