我正在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
方法来解决这样的任务吗?
答案 0 :(得分: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
如果某人有更多功能性的做法,我将不胜感激。