以编程方式创建带有命名空间的 xml 属性

Kin*_*sin 3 c# xml linq-to-xml xml-namespaces

我如何创建以下内容XElement

<data name="MyKey" xml:space="preserve">
    <value>Date of birth</value>
    <comment>Some comment</comment>
</data>
Run Code Online (Sandbox Code Playgroud)

它抛出

“‘:’字符(十六进制值 0x3A)不能包含在名称中。”

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" });
Run Code Online (Sandbox Code Playgroud)

由于这是文件的一部分ResX,因此会有许多这样的<data></data>元素。

Jon*_*eet 5

将名称空间与本地名称分开,XName +(XNamespace, string)为方便起见,使用运算符:

data.Add(new XAttribute(XNamespace.Xml + "space", "preserve"));
Run Code Online (Sandbox Code Playgroud)

请注意,您可以更简单地一次编写整个元素创建:

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")
);
Run Code Online (Sandbox Code Playgroud)