在F#中从XML序列化中删除回车符

3
更新:一些背景 - 我使用XML文件通过驱动JasperReports的Java应用程序生成一组PDF。当我使用这个新的XML文件时,所有的报告都是空白的。我已经排除了网络问题,因为我使用了来自同一服务器的旧XML文件来运行Java应用程序。我已经使用十六进制编辑器比较了两个文件(旧文件和新文件),我的第一个线索是新文件中有回车符,而旧文件中没有回车符。这可能无法解决问题,但我想将其从方程式中消除。

我认为我需要从我的XML文件中删除所有回车符,以便它按照我的要求工作。在我的搜索中,我找到了最接近的解决方法:

.Replace("\r","")

但是在以下代码中我该在哪里使用它呢?我创建了我的数据模型,创建了一个根节点,并将其传递给序列化程序。在什么时候可以说"去除回车符"?

let def = new reportDefinition("decileRank", "jasper", new template("\\\\server\\location\\filename.jrxml", "jrxml"))
let header = new reportDefinitions([| def |])
let root = reportGenerator(header, new dbConnection(), new reports(reportsArray))

let path = sprintf "C:\\JasperRpt\\parameter_files\\%s\\%d\\%s\\%s\\" report year pmFirm pmName //(System.DateTime.Now.ToString("ddMMyyyy")) 
Directory.CreateDirectory(path) |> ignore
let filename = sprintf "%s%s" path month
printfn "%s" filename     
use fs = new FileStream(filename, FileMode.Create) 
let xmlSerializer = XmlSerializer(typeof<reportGenerator>)    
xmlSerializer.Serialize(fs,root)
fs.Close()

你为什么这样想?你是否遇到了异常?输出结果不如你所愿吗?请解释一下你现在的输出是什么,以及你需要改变什么。 - rene
@rene,请看我的更新以获得澄清。 - Ramy
2个回答

2

这可能不是最好的解决方案,但你可以尝试一下

// after your current code
let xmlString = File.ReadAllText filename
ignore( File.WriteAllText( filename , xmlString.Replace("\r","")))

2
XmlWriterSettings具有一些格式化输出的选项,因此将输出通过XmlWriter传递。
您应该能够像这样做(我现在没有FSI,不知道它是否编译:)
 //use fs = new FileStream(filename, FileMode.Create) 
 let settings = new XmlWriterSettings();
 settings.Indent <- true;
 settings.NewLineChars <- "\n";
 use w = XmlWriter.Create(filename, settings);
 let xmlSerializer = XmlSerializer(typeof<reportGenerator>)    
 xmlSerializer.Serialize(w,root)

这看起来很有前途。我会在有时间的时候试一试。 - Ramy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接