【问题标题】:F# XML type provider changes nameF# XML 类型提供程序更改名称
【发布时间】:2014-05-19 04:22:09
【问题描述】:

使用 FSharp.Data(版本 2.0.5)中的 XML 类型提供程序,元素名称与架构中的名称不匹配。

例如,我的 XML 文件以:

<?xml version="1.0" encoding="utf-8"?>
<WebQuery><Results><Result><PrimaryID>105882365</PrimaryID><CONTACT_ADDRESS_LINE_1 /><CONTACT_ADDRESS_LINE_2 />

但在 F# 中,我需要使用

引用 CONTACT_ADDRESS_LINE_1
.ContactAddressLine1

关于类型提供程序有什么我不明白的地方吗?为什么 F# 中的名称与架构中的元素名称不同?

【问题讨论】:

  • 考虑到其他元素遵循的格式,CONTACT_ADDRESS_LINE_1 似乎很不和谐。
  • ChaosPandoin - 也许是这样,但我不控制架构,它是由外部公司提供的。
  • 我必须对 XML 类型提供程序进行一些阅读。我不禁想知道他们是否在代表原始表单的元素上保留了内部元数据。他们似乎有可能将名称格式化为更多的 .NET 约定。

标签: xml f# type-providers f#-data


【解决方案1】:

F# Data 使属性名称为 PascalCased 以提高可读性,但这对功能的影响为零,通过使用 ContactAddressLine1,您仍将访问 CONTACT_ADDRESS_LINE_1 元素

【讨论】:

  • 实际上这确实会影响功能,因为 XML 元素(和属性)名称是区分大小写的,因此“位置”和“位置”指的是不同的元素,并且可以将两者放在同一个模式中.
  • 在这种情况下,一个属性将称为 Location,另一个属性称为 Location2。不用担心,实际的属性和元素名称不需要与生成的属性匹配。如果你愿意,你可以反编译生成的可执行文件,看看它使用了正确的名称
  • Gustavo - 我接受你的回答,这是设计使然。我不喜欢这个设计,但这不是讨论的地方。谢谢。
  • 考虑提供一个静态参数来禁用当前命名。大多数人实际上都喜欢它。
猜你喜欢
  • 2014-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多