diff --git a/sources/TemplateEngine.Docx.Tests/Resources/DocumentWithSingleFieldFilledWithLinebreaks.xml b/sources/TemplateEngine.Docx.Tests/Resources/DocumentWithSingleFieldFilledWithLinebreaks.xml index d3236a5..be3da22 100644 --- a/sources/TemplateEngine.Docx.Tests/Resources/DocumentWithSingleFieldFilledWithLinebreaks.xml +++ b/sources/TemplateEngine.Docx.Tests/Resources/DocumentWithSingleFieldFilledWithLinebreaks.xml @@ -1,2 +1,20 @@  -09/06/2013Friday, 06 September 20132013 September \ No newline at end of file + + + + + 09/06/2013 + + Friday, 06 September 2013 + + 2013 September + + + + + + + + + + \ No newline at end of file diff --git a/sources/TemplateEngine.Docx/OpenXMLHelpers/XElementExtensions.cs b/sources/TemplateEngine.Docx/OpenXMLHelpers/XElementExtensions.cs index ae83812..abda7e9 100644 --- a/sources/TemplateEngine.Docx/OpenXMLHelpers/XElementExtensions.cs +++ b/sources/TemplateEngine.Docx/OpenXMLHelpers/XElementExtensions.cs @@ -143,18 +143,22 @@ public static void ReplaceNewLinesWithBreaks(XElement xElem) { if (xElem == null) return; - var textWithBreaks = xElem.Descendants(W.t).Where(t => t.Value.Contains("\r\n")); - foreach (var textWithBreak in textWithBreaks) - { + var textWithBreaks = xElem.Descendants(W.t).Where(t => t.Value.Contains("\n")).ToList(); + for (var i = textWithBreaks.Count - 1; i >= 0; i--) + { + var textWithBreak = textWithBreaks[i]; var text = textWithBreak.Value; var split = text.Replace("\r\n", "\n").Split(new[] { "\n" }, StringSplitOptions.None); - textWithBreak.Value = string.Empty; + + var parent = textWithBreak.Parent; + textWithBreak.Remove(); + foreach (var s in split) { - textWithBreak.Add(new XElement(W.t, s)); - textWithBreak.Add(new XElement(W.br)); + parent.Add(new XElement(W.t, s)); + parent.Add(new XElement(W.br)); } - textWithBreak.Descendants(W.br).Last().Remove(); + parent.Descendants(W.br).Last().Remove(); } } }