To get the node names in small letters use
String.ToLower()
For example:
XElement xeChildValue = new XElement(children[i].ToLower());
[UPDATE] Thanks to Richard Deeming, who saw the error in my code.
To insert CDATA you should use the class XCData.
Example:
XCData cdata = new XCData(values[i]);
xeChildValue.Add(cdata);
To insert CDATA you can use String.Format()
For example:
xeChildValue.Value = String.Format("<![CDATA[{0}]]>", values[i]);
CDATA - (Unparsed) Character Data[
^]
And maybe checkout the various string functions available:
String Methods[
^]