The type 'XmlProvider' is not defined

2019-07-05 03:06发布

I'm trying to use the FSharp.Data third party library but am getting an error The type 'XmlProvider' is not defined on the XmlProvider class.

namespace KMyMoney

open FSharp.Data

  module Read =

    let xml = File.ReadAllText("KMyMoneySampleFile.xml")
    type KMyMoneySource = XmlProvider<xml>

I'm using NuGet to get the library. Library is 'FSharp.Data 1.1.8'

When I type FSharp.Data. There are four options given: Csv, FreebaseOperators, Json, and RuntimeImplementation.

Am I missing something? I'm relatively new to F#. So, sorry for the simple question. I've looked on GitHub but haven't seen any mention of this problem. I am creating a library in F#.

3条回答
smile是对你的礼貌
2楼-- · 2019-07-05 03:22

The parameter between <> is the Sample parameter of the type provider, which has to be a compile time constant. That sample is used to infer the structure of the xml.

Try this instead:

namespace KMyMoney

open FSharp.Data

module Read =

    type KMyMoneySource = XmlProvider<"KMyMoneySampleFile.xml">

and then do

let xml = KMyMoneySource.Load("KMyMoneySampleFile.xml")

or if you're reading the same file you used as the XmlProvider sample parameter, just do this:

let xml = KMyMoneySource.GetSample() 

Note that Type Providers are a feature of F# 3.0, so this only works in VS2012 or upper. If you're using VS2010, you'll just get a bunch of syntax errors.

查看更多
唯我独甜
3楼-- · 2019-07-05 03:23

The data has to be available at compile-time which is achieved by putting a file reference in the angle brackets like this (notice that it is a string literal containing a file path, not a string binding containing the data). You can also achieve this by putting a string literal containing the format in the brackets:

type Stocks = CsvProvider<"../docs/MSFT.csv">

let csv = new CsvProvider<"1,2,3", HasHeaders = false, Schema = "Duration (float<second>),foo,float option">()

See here for more information.

查看更多
SAY GOODBYE
4楼-- · 2019-07-05 03:29

Check out this link. Basically you need to add System.Xml.Linq.dll also as reference to your project.

查看更多
登录 后发表回答