如何从 xml 类型提供程序引用第一个节点

How to reference the first node from the xml type provider

我似乎无法 select 仅 xml 类型提供商的第一个地址邮政编码。

下面的片段是来自更大的 XML 文档的片段:

                <applicant>
                    <address>
                        <buildingno>8</buildingno>
                        <street1>Bob Way</street1>
                        <locality>Jones</locality>
                        <posttown>Somewhere</posttown>
                        <postcode>AB12 3QE</postcode>
                    </address>
                    <address>
                        <buildingno>9</buildingno>
                        <street1>SomeStreet</street1>
                        <posttown>Somewhere</posttown>
                        <postcode>AB13 4FE</postcode>
                    </address>
                </applicant>

我已经在类型提供程序中加载了文档:

type XmlReqSample = XmlProvider<"C:\Temp\requests\samples.xml", SampleIsList=true, Global=true>

有些请求只有一个地址,有些有两个或更多,这就是我尝试加载样本的原因。我想知道如何 select 只有第一个地址邮编:

// 'file' is a string of XML data
let doc = XmlReqSample.Parse(file)
let postCode = doc.Body.Applicant.Address.Value.Postcode.Value

但是,我不能 select 只有第一个邮政编码。

如何 select 第一个地址,尤其是邮政编码?

#r "packages/FSharp.Data.2.2.3/lib/portable-net40+sl5+wp8+win8/FSharp.Data.dll"
#r "System.Xml.Linq"

open FSharp.Data

type XmlReqSample = XmlProvider<"sample.xml">
// file is a string of XML data
let applicant = XmlReqSample.Load(file)

let firstAddress =
  applicant.Addresses
   |> Array.tryFind (fun _ -> true)

val firstAddess : Address option

此外,要从地址获取邮政编码,您可以定义一个小函数:

let getPostCode address =
  address |> Option.bind (fun (t:XmlReqSample.Address) -> Some t.Postcode)  

并像这样使用:

getPostCode firstAddress

val it : string option = Some "AB12 3QE"