1

我正在尝试更新 XML,但想保留格式{缩进}而不插入 XmlDeclaration 标记。以下是我正在应用的代码段。

let UpdateAndSave (configFileName:string) = 
    let xmlDoc = XDocument.Load(configFileName)
    xmlDoc.XPathEvaluate(@"Product/SomeTag/Attr[@type='Value']") :?> _
    |> Seq.cast<XElement>
    |> Seq.iter (fun elem -> elem.AddAfterSelf(XElement.Parse("<Risk type=\"123\" methodology=\"Sample\"/>")))
    do 
        let xmlWriterSettings = new XmlWriterSettings()
        xmlWriterSettings.OmitXmlDeclaration = true
        xmlWriterSettings.Indent = true
        using(XmlWriter.Create(configFileName, xmlWriterSettings))(fun xmlFileWriter -> 
        xmlDoc.Save(xmlFileWriter)
        )   
    configFileName

更新后,xml 格式完全丢失,并且“XmlDeclaration”标签也被插入。我错过了什么吗?

4

1 回答 1

4

在 F# 中,=是比较运算符,<-而是对可变字段的赋值。我希望编译器抱怨在您的示例xmlWriterSettings.OmitXmlDeclaration = true中没有unit价值。

此外,您的do块似乎是多余的,为了简洁起见using可以替换use为。

let xmlWriterSettings = new XmlWriterSettings()
xmlWriterSettings.OmitXmlDeclaration <- true
xmlWriterSettings.Indent <- true
use xmlWriter = XmlWriter.Create(configFileName, xmlWriterSettings)
xmlDoc.Save(xmlWriter)
于 2012-07-19T11:07:05.207 回答