数据结构-如何使用F#创建复杂的XML树



我正在F#中搜索一个方法,从域类模型构造xml-tree结构。

我猜你有一些具有父子关系的类(类型(,比如:

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

问题是,您不能简单地将domain-tree1: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方法来解决这样的任务吗?

我的问题已经解决。对于所有对代码感兴趣的人。。。我终于想出了这样的东西:

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

如果有人有更实用的风格来做这件事,我将感谢任何评论。

最新更新