xml - F# Xml Type Provider 测试节点是否存在

标签 xml f# type-providers

这看起来应该是微不足道的。我正在解析许多 XML 文件,其中一些包含所有预期的节点,而另一些则不包含。我需要能够测试节点的存在。我正在使用 F# Xml 类型提供程序。此代码不起作用,但它说明了我正在尝试做的事情。

#r "../../../bin/FSharp.Data.dll"
#r "System.Xml.Linq.dll"
open FSharp.Data

type Author = XmlProvider<"""<author name="Paul Feyerabend" born="1924"><height>10</height></author>""">
let sample = Author.Parse("""<author name="Karl Popper" born="1902" />""")
let containsHeight = sample.Height <> null // I want this to return false

最佳答案

XML 类型提供程序通过从示例中推断类型来工作。您可以使用可选的 SampleIsList 参数提供多个示例:

open FSharp.Data

type Author = XmlProvider<"""
<samples>
    <author name="Paul Feyerabend" born="1924">
        <height>10</height>
    </author>
    <author name="Karl Popper" born="1902" />
</samples>""", SampleIsList = true>

这使您能够加载 popperfeyerabend:

let popper = Author.Parse("""<author name="Karl Popper" born="1902" />""")
let feyerabend = Author.Parse("""<author name="Paul Feyerabend" born="1924"><height>10</height></author>""")

您现在可以测试高度是否存在:

> popper.Height.IsSome;;
val it : bool = false
> feyerabend.Height.IsSome;;
val it : bool = true
> feyerabend.Height |> Option.get;;
val it : int = 10

关于xml - F# Xml Type Provider 测试节点是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36022684/

相关文章:

map - f#设置和映射相等

inheritance - 传播可选参数

.net - 重构小型 F# 函数

f# - 具有不同方案的不同文件中的通用 Xml 的类型?

entity-framework - 使用SqlEntityConnection,CLR类型到EDM类型的映射不明确

c++ - QTabWidget 内容不展开

c# - 向后兼容的 XML 反序列化

android - android中配置网络安全xml报错

xml - 文本::平衡和多行 xml

docker - F# 类型是否可以与容器化 (Docker) 资源一起使用?