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
  • 37,241
  • 25
  • 195
  • 267
KingKerosin
  • 3,639
  • 4
  • 38
  • 77

1 Answers1

5

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,421,763
  • 867
  • 9,128
  • 9,194