3

How can I create the following as XElement?

<data name="MyKey" xml:space="preserve">
    <value>Date of birth</value>
    <comment>Some comment</comment>
</data>

It throws

"The ':' character, hexadecimal value 0x3A, cannot be included in a name."

var data = new XElement("data");

data.Add(new XAttribute("name", translation.Key));
data.Add(new XAttribute("xml:space", "preserve")); // <-- here is the error

data.Add(new XElement("value") { Value = "Date of birth" });
data.Add(new XElement("comment") { Value = "Some comment" });

As this is part of a ResX-file, there will be many such <data></data>-elements.

Cœur
  • 34,719
  • 24
  • 185
  • 251
KingKerosin
  • 3,379
  • 4
  • 33
  • 70

1 Answers1

4

Separate the namespace from the local name, using the XName +(XNamespace, string) operator for convenience:

data.Add(new XAttribute(XNamespace.Xml + "space", "preserve"));

Note that you can write the whole of your element creation in a single go rather more simply:

var data = new XElement("data",
    new XAttribute("name", "MyKey"),
    new XAttribute(XNamespace.Xml + "space", "preserve"),
    new XElement("value", "Date of birth"),
    new XElement("comment", "Some comment")
);
Jon Skeet
  • 1,335,956
  • 823
  • 8,931
  • 9,049