Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用F#创建复杂的XML树?_Xml_Data Structures_F#_Linq To Xml_Xml Generation - Fatal编程技术网

如何使用F#创建复杂的XML树?

如何使用F#创建复杂的XML树?,xml,data-structures,f#,linq-to-xml,xml-generation,Xml,Data Structures,F#,Linq To Xml,Xml Generation,我正在F#中搜索一种方法,从域类模型构建xml树 假设您有一些具有父子关系的类(类型),如: Container -> Child -> Child -> Container -> Child -> Container -> Child -> Child -> Container -> etc. 问题是,您不能仅将此域树1:1转换为XML,但有时您需要做一些细微的修改,例如: "If Typ

我正在
F#
中搜索一种方法,从域类模型构建
xml树

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

Container
-> Child
-> Child
-> Container
   -> Child
   -> Container
      -> Child
      -> Child
   -> Container
   -> etc.
问题是,您不能仅将此
域树
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语言来实现它


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

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

opensystem.Xml
open System.Xml.Linq
让xmlNs=“somenamespaceurl”
让XNameStd name=XName.Get(name,xmlNs)
让插入条件值到插入值到检查属性名称(元素:XElement)=
如果valueToInsert=valueToCheck,则
添加(XAttribute(XNameStd attributeName,valueToInsert))
让我们插入sthtotree(sth:DomainObject)(currentRoot:XElement)=
let element=XElement(XNameStd“MyDomainElementInXML”)
currentRoot.Add(元素)
插入条件(布尔属性,真,“IsEnabled”,元素)
让我们创建xmldoc=
设someObj=DomainObject(…)
让doc=XDocument()
InsertSthToTree(doc.Root)
医生

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

xml类型提供程序可能会工作得更好。我查看了XmlProvider。但它并不真正适合我的任务,因为我必须提供一些示例数据来运行数据提供程序。基于这个示例数据,我可以编写xml。对于简单的结构,这是可以的,但我认为在我的情况下,关系太复杂了,因此我无法始终提前提供示例数据。您能显示要序列化的对象层次结构和预期的XML吗?嗨,我找到了解决我的任务的方法。我没想到能够在函数调用中修改XDocument。我想,为了向XML树中添加内容,我必须创建一个新树并返回它。因为XDocument有可变的属性(我猜),我可以在函数中添加元素,而不必做Ref之类的事情。。。我仍然不认为它是完全功能性的,但它们是我现在创建XML树的方式,满足了我的需要。