xml - 如何在 FSharp.Data.XmlProvider 中使用保留字?

标签 xml f# type-providers f#-data fsharp.data.typeproviders

我正在使用FSharp.Data.XmlProvider 。我的 xml 包含 <load>节点。类型提供程序已经有一个静态 Load用于加载实例的成员。我查找了有关如何让 XmlProvider 正确解释保留字的文档,但没有找到任何内容。有人可以提供有关如何生成我的 <load> 的见解吗?类型提供者中的节点?也许一个构造函数参数可以告诉 XmlProvider我在 xml 中将保留字作为节点?

代码示例:

module LoadModule =
  [<Literal>]
  let loadSample = """
    <root>
      <loads>
        <load loadid="1" value="12345" />
      </loads>
    </root>"""
  type LoadXml = XmlProvider<loadSample>
  let loadXml = LoadXml.Load("")  // This is the static member Load.  LoadXml does not contain a `Load` member for my node
  let x = loadXml.Load // The instance does contain my Load member, 
                       // but I need to construct a `Load []` using a static `Load` member 
                       // because I need to set the values programmatically.  
                       // Instance members are not settable.

最佳答案

您使用 new 关键字来解析正确的重载:

[<Literal>]
let loadSample = """
  <root>
    <loads>
      <load loadid="1" value="12345" />
    </loads>
  </root>"""
type LoadXml = XmlProvider<loadSample>
let loadXml = LoadXml.Parse("...")
let x = LoadXml.Root (new LoadXml.Load(loadid=1,value=12345) )

另请注意,在示例中指示 loads 可以包含多个 load 项,LoadXml.Root 构造函数采用 Load 实例数组而不是单个实例:

[<Literal>]
let loadSample = """
  <root>
    <loads>
      <load loadid="1" value="12345" />
      <load loadid="2" value="23456" />
    </loads>
  </root>"""
type LoadXml = XmlProvider<loadSample>
let loadXml = LoadXml.Parse("...")
let x = LoadXml.Root [| new LoadXml.Load(loadid=1,value=12345); ... |]

关于xml - 如何在 FSharp.Data.XmlProvider 中使用保留字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57625841/

相关文章:

F# 查询串联

f# - 嵌套类型提供者

xml - 使用 XSLT 从 XML 文件中删除所有处理指令

android - 如何在 Android 上使用 XmlResourceParser 从 Xml 文件中仅获取一个元素的值?

python - 在 Deedle 中使用默认值将列添加到数据框

string - 如何在 F# 中使用 String.iter

F# WSDL 类型提供程序和 Confluence

xml - 给元素添加命名空间

java - 在什么情况下尖括号用反斜杠转义?

recursion - F# - 匿名记录的递归