Revision: 64912
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at October 4, 2013 04:00 by thedark
Initial Code
public static class XmlDocumentExtensions { public static XmlCDataSection[] CreateCDataSections(this XmlDocument doc, string text) { if (text.Contains("]]>")) { var parts = text.Split(new[] { "]]>" }, StringSplitOptions.None); XmlCDataSection[] sections = new XmlCDataSection[parts.Length]; var part = parts[0]; sections[0] = doc.CreateCDataSection(string.Format("{0}]]", part)); int i = 1; for (; i < parts.Length - 1; ++i) { part = parts[i]; sections[i] = doc.CreateCDataSection(string.Format(">{0}]]", part)); } part = parts[i]; sections[i] = doc.CreateCDataSection(string.Format(">{0}", part)); return sections; } else { return new[] { doc.CreateCDataSection(text) }; } } }
Initial URL
Initial Description
XmlDocument will not behave when you try to CreateCDataSection passing it a string that contains "]]>" This extension method returns an array of XmlCDataSection, each of which will contain the parts separated by "]]" and ">". Example: For the string "This string contains ]]>, and ]]> is invalid within CData sections", the return value will be an array containing the following XmlCDataSections: "This string contains ]]" ">, and ]]" "> is invalid within CData sections" which works beautifully. Optimizations are welcome.
Initial Title
XmlDocument extension method to create CData sections with CData terminators inside
Initial Tags
xml, extension
Initial Language
C#