【问题标题】:F#: How to Generate XML using a complex XSDF#:如何使用复杂的 XSD 生成 XML
【发布时间】:2017-12-06 12:59:39
【问题描述】:

我正在尝试使用 F# 来生成 XML,基于这个复杂的 XSD Schema ( http://www.nfe.fazenda.gov.br/portal/exibirArquivo.aspx?conteudo=BALgvpK9Jvo=)
但我收到编译器错误:

FS0503 接受 0 个参数的成员或对象构造函数“Dest”不是 可从此代码位置访问。方法的所有可访问版本 'Dest' 接受 1 个参数。

我想我给出了所有正确的论点:

module xsd1

open FSharp.Data
open System.Xml.Linq

type nfe = XmlProvider<Schema="nfe_v4.00.xsd", ResolutionFolder="c:/temp/nfe">

let GenerateNFe () =
    let ide = Unchecked.defaultof<nfe.Ide>
    let emit = Unchecked.defaultof<nfe.Emit>
    let mydest = nfe.Dest(cnpj=None,
                          cpf=(Some "12345678901"),
                          idEstrangeiro=None,
                          xNome=(Some "TONY"),
                          enderDest=None,
                          indleDest="",
                          ie=None,
                          isuf=None,
                          im=None,
                          email=(Some "tonyvca@oldmail.com")
                         )

    let i = nfe.InfNFe(
                       versao="4.00", 
                       id="NFe123 F#",
                       ide=ide, 
                       emit=emit, 
                       avulsa=None, 
                       dest=(Some mydest), 
                       retirada=None, 
                       entrega=None, 
                       autXmLs=Unchecked.defaultof<nfe.AutXml[]>, 
                       dets=Unchecked.defaultof<nfe.Det[]>, 
                       total=Unchecked.defaultof<nfe.Total>, 
                       transp=Unchecked.defaultof<nfe.Transp>, 
                       cobr=None, 
                       pag=Unchecked.defaultof<nfe.Pag>, 
                       infAdic=None, 
                       exporta=None, 
                       compra=None, 
                       cana=None                       
                      )
    i

如何填写 dest“属性”?

我也改不了

let ChangeDest (n: nfe) =
    let novodest = nfe.Dest(cnpj=None, 
                            cpf=Some "9999999999",
                            idEstrangeiro=None, 
                            xNome=Some "NEW TONY", 
                            enderDest=None,
                            indleDest=None,
                            ie=None,
                            isuf=None, 
                            im=None, 
                            email=Some "tonyvca@freemail.com"
                            )
    let newdocument = { n with InfNFe.dest = novodest }
    newdocument

为方便起见,我附上了一个带有 XSD 和 F# 代码的示例项目
https://drive.google.com/open?id=1IbMpmOKfh4B-gKj4CCXTuDXlQxyUN1Wr

这不起作用:

let mydest = new nfe.Dest(cnpj=None, cpf=(Some "11111111111"), idEstrangeiro=None, xNome=(Some "TONY"), enderDest=None, indleDest="indledest", ie=None, isuf=None, im=None, email=(Some "tonyvca@hotmail.com") )

但这有效:

let mydest = new nfe.Dest(None, (Some "11111111111"), None, (Some "TONY"), None, "indledest", ie=None, isuf=None, im=None, email=(Some "tonyvca@hotmail.com") )

如果我删除命名参数,直到 indleDest 部分,它可以工作,你能看看并帮助我如何使它工作将所有命名参数写入?

【问题讨论】:

  • indleDest 应该是字符串,而不是字符串选项。不幸的是,当您在提供的类型的构造函数中使用错误的类型时,您不会收到有用的错误消息。
  • 感谢您指出这一点!但是在我修复它之后仍然会收到该错误消息
  • 尝试将括号放在任何有空格的地方:例如(Some "12345678901")。我记得有时需要那个。这有帮助吗?
  • 括号似乎没有解决这个错误。
  • 你能尝试在没有命名参数的情况下传递值吗?我知道它的可读性较差且更容易出错,但这只是另一种尝试。不幸的是,我无法访问我的电脑,所以目前我无能为力

标签: xml f# xsd


【解决方案1】:

我发现了问题:
由于字体问题和参数名称缺少自动补全功能,我输入了 indleDest (INDLEDEST) 但正确的是 indIeDest (INDIEDEST),现在它可以正常编译了! :D

let mydest = nfe.Dest(cnpj=None,
                      cpf=(Some "81679580515"),
                      idEstrangeiro=None,
                      xNome=(Some "TONY"),
                      enderDest=None,
                      indIeDest="",
                      ie=None,
                      isuf=None,
                      im=None,
                      email=(Some "tonyvca@hotmail.com")
                     )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-18
    • 2011-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-01
    相关资源
    最近更新 更多