更新:一些背景 - 我使用xml文件生成一组pdfs(通过驱动JasperReports的java应用程序)。当我使用这个新的xml文件时,所有报告都是空白的。我排除了网络问题,因为我使用来自同一服务器的旧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()
答案 0 :(得分:2)
这可能不是最佳解决方案,但您可以尝试
// after your current code
let xmlString = File.ReadAllText filename
ignore( File.WriteAllText( filename , xmlString.Replace("\r","")))
答案 1 :(得分: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)