Чтобы построить словарь из seq, вы обычно используете dict функцию . Требуется последовательность кортежей ключ / значение, поэтому проблема сводится к созданию этой последовательности кортежей. С System.Xml.Linq вы перемещаетесь по XML, чтобы получить значения атрибутов в последовательности.
Вот код:
let x = @"<Overrides>
<token key='A' value='1'/>
<token key='B' value='2'/>
<token key='C' value='3'/>
<token key='D' value='4'/>
<token key='E' value='5'/>
<token key='F' value='6'/>
</Overrides>"
#if INTERACTIVE
#r "System.Xml"
#r "System.Xml.Linq"
#endif
open System.Xml.Linq
let docs = XDocument.Parse x
let elem = docs.Root.Descendants(XName.Get "token")
|> Seq.map (fun x -> x.Attribute(XName.Get "key").Value, x.Attribute(XName.Get "value").Value)
|> dict
Seq.head возвращает первый элемент последовательности, здесь это бесполезно, если вы не хотите использовать его для перехода к узлу переопределений.
Seq.iter применяет функцию к каждому элементу в последовательности, очень похожей на цикл for
/ foreach
, только для побочных эффектов функции. Здесь это бесполезно, если только вы не хотите создавать словарь, то есть добавлять ключ / значения в уже существующий словарь.