2

我正在寻找一种方法F#xml-tree来从域类模型构造一个-structrue。

猜猜您有一些具有父子关系的类(类型),例如:

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

问题是你不能简单地将这个domain-tree 1:1转换成 XML,但有时你必须做一些细微的修改,例如:

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

目前我正在使用XDocument+System.Xml.Linq在我的域类模型上XElement和一些递归函数,它获取对必须从另一个函数初始化的第一个函数的引用。整个“参考事物”似乎没有什么功能,我多次希望在 C# 而不是 F# 中实现它。

有人可以提出一种更实用、更自然F#ish的方法来解决这样的任务吗?

4

1 回答 1

0

我的问题已经解决了。对于所有对代码感兴趣的人......我终于想出了某件事。像这样:

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 回答