2

ドメインクラスモデルから構造体F#を構築する方法を探しています。xml-tree

次のような親子関係を持ついくつかのクラス (型) があると思います。

Container
-> Child
-> Child
-> Container
   -> Child
   -> Container
      -> Child
      -> Child
   -> Container
   -> etc.

問題は、この1:1を単純に XML に変換することはできず、場合によってはわずかな変更を加える必要があることです。domain-tree

 "If Type(Element) = A then add additionally XYZ-Element at root"
 "If Type(Element) = B then nest B into ABC-Element"

現在、ドメイン クラス モデルに対してXDocument+といくつかの再帰関数を使用しています。これは、別の関数から初期化する必要がある最初のものへの参照を取得します。「参照するもの」全体はかなり機能していないようで、F# ではなく C# で実装したいと何度も思いました。System.Xml.LinqXElement

F#ish誰かがそのようなタスクを解決するためのより機能的で自然な方法を提案できますか?

4

1 に答える 1

0

私の問題は解決されました。コードに興味のあるすべての人へ... やっと sth を思いつきました。このような:

open System.Xml
open System.Xml.Linq

let xmlNs           = "somenamespaceurl"
let XNameStd   name = XName.Get(name, xmlNs)

let InsertIfCondition valueToInsert valueToCheck attributeName (element:XElement) =
  if valueToInsert = valueToCheck then
    element.Add(XAttribute(XNameStd attributeName,valueToInsert))


let InsertSthToTree(sth:DomainObject) (currentRoot:XElement) =
  let element = XElement(XNameStd "MyDomainElementInXML")
  currentRoot.Add(element)
  InsertIfCondition(sth.BooleanProperty,true,"IsEnabled",element)

let CreateXMLDoc =
  let someObj = DomainObject(...)
  let doc     = XDocument()
  InsertSthToTree(doc.Root)
  doc

誰かがこれを行うより機能的なスタイルを持っている場合、コメントをいただければ幸いです。

于 2014-05-02T12:52:28.487 に答える