Я изучаю F # и столкнулся с вопросом, для которого поисковая система не очень помогла мне.Выбор объекта из объекта с использованием последовательностей в F #
У меня есть документ Xml с XmlNodes, которые выбираются с помощью Xpath. Я отфильтровал атрибуты, и коллекция атрибутов может быть возвращена из Seq. Однако, когда я возвращаю значение атрибута вместо атрибута, следующее сообщение об ошибке отображается при компиляции
This expression was expected to have type 'a option
but here has type string
Фрагмент кода приведен ниже
let doc = new System.Xml.XmlDocument() in
doc.LoadXml xml;
doc.SelectNodes "//*[local-name()='SingleSignOnService']"
|> Seq.cast<System.Xml.XmlNode>
|> Seq.collect (fun node -> node.Attributes |> Seq.cast<System.Xml.XmlAttribute>)
|> Seq.filter (fun attr -> attr.Name.Equals("Binding",StringComparison.OrdinalIgnoreCase))
|> Seq.choose(fun attr -> attr.Value)
Пожалуйста, предложите мне правильный подход.
EDIT
Вот решение, которое я создал с помощью Mr.Marklam. Надеюсь, это поможет кому-либо еще
let doc = new System.Xml.XmlDocument() in
doc.LoadXml xml;
doc.SelectNodes "//*[local-name()='SingleSignOnService']"
|> Seq.cast<System.Xml.XmlNode>
|> Seq.collect (fun node -> node.Attributes |> Seq.cast<System.Xml.XmlAttribute> |> Seq.filter (fun attr -> attr.Name.Equals("Binding",StringComparison.OrdinalIgnoreCase)))
|> Seq.choose (fun attr -> if (attr.Name.Equals("Binding",StringComparison.OrdinalIgnoreCase)) then Some attr.Value else None)
Вы пробовали 'Seq.map' вместо' Seq.choose'? – s952163