使用XDocument与XmlWriterSettings一起保存时,XML格式丢失了

时间:2012-07-19 10:49:56

标签: xml f# xsd linq-to-xml

我正在尝试更新XML,但希望保留格式{indenting}而不是插入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”标记。我错过了什么吗?

1 个答案:

答案 0 :(得分: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)