我知道如何使用类型提供程序从XML源中检索数据。但是,我需要修改XML的特定部分并将其保存到磁盘。我尝试使用<-
为节点赋值,但该属性是只读的。
例如:
let doc = MyXml.load fileName
doc.ItemId.Id <- "newId" // doesn't work
doc |> saveXml
有一个关于JSON的类似问题,建议是创建一个新对象,但这个问题是针对XML的。
我知道如何使用类型提供程序从XML源中检索数据。但是,我需要修改XML的特定部分并将其保存到磁盘。我尝试使用<-
为节点赋值,但该属性是只读的。
例如:
let doc = MyXml.load fileName
doc.ItemId.Id <- "newId" // doesn't work
doc |> saveXml
有一个关于JSON的类似问题,建议是创建一个新对象,但这个问题是针对XML的。
在研究我的问题时,我发现可以使用.XElement
访问器来获取对可变的XElement
对象的引用。因此,解决方案是:
let doc = MyXml.load fileName
doc.ItemId.XElement.Element(XName.Get "Id").Value <- "newId" // tada
doc.XDocument.Save(...)
请注意,如果要修改叶子节点,则必须在父级上使用.XElement
访问器。这是因为叶子节点的类型是基元类型,没有自己的.XElement
访问器。有点可惜,但我想当你想要只读访问值时,这会让生活变得更加简单。