возврат каретки из сериализации XML в F # - PullRequest
3 голосов
/ 11 февраля 2011

обновление: немного предыстории - я использую XML-файл для генерации набора PDF-файлов (через Java-приложение, которое управляет JasperReports). все отчеты выходят пустыми, когда я использую этот новый XML-файл. Я исключил проблемы с сетью, потому что я использую старый xml-файл с того же сервера, на котором я запускаю java-приложение с новым xml-файлом. Я сравнил два файла (старый-хороший и новый-плохой) с помощью hex-редактора, и моя первая подсказка заключается в том, что в новом файле есть возврат каретки, а в старом нет. Возможно, это не решит проблему, но я бы хотел исключить ее из уравнения.

Я думаю Мне нужно удалить все возвраты каретки из моего 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()

Ответы [ 2 ]

2 голосов
/ 11 февраля 2011

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)
2 голосов
/ 11 февраля 2011

Возможно, это не лучшее решение, но вы можете попробовать

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