我正在F#
中搜索一个方法,从域类模型构造xml-tree
结构。
我猜你有一些具有父子关系的类(类型(,比如:
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
方法来解决这样的任务吗?
我的问题已经解决。对于所有对代码感兴趣的人。。。我终于想出了这样的东西:
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
如果有人有更实用的风格来做这件事,我将感谢任何评论。