转义XElement名称的字符串

时间:2015-05-07 19:44:01

标签: c# xml

我正在尝试使用c#

获取以下xml格式
<Content xmlns="uuid:5c2dffe6-cf72-4211-a8a0-dc6a7baf3ff1">
 <redirect xmlns:xlink="http://www.w3.org/1999/xlink">
  <key>formssss</key>
  <value>/AAAAAAA</value>
 </redirect>

我的初始问题是转义xml属性,我在尝试创建xml节点时使用了以下代码

 string name = @"Content xmlns=uuid:5c2dffe6-cf72-4211-a8a0-dc6a7baf3ff1";
                //build root xml node <redirects> </redirects>
 var rootNode = new XElement(name);

不断出现以下错误

未处理的类型&#39; System.Xml.XmlException&#39;发生在System.Xml.dll

其他信息:&#39; &#39;字符,十六进制值0x20,不能包含在名称中。

为什么我逃脱了字符串?我也尝试使用反斜杠。

使用John提供的答案,我能够编译,但xml输出不包括该属性。这是我的输出

<Content>
  <Redirect>
     <key>/*$0*/</key>
     <value>/</value>
  </Redirect>
</Content>

如您所见,我缺少属性名称空间

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:4)

XElement构造函数的参数是元素的本地名称,而不是name加名称空间。

尝试:

XNamespace ns = "uuid:5c2dffe6-cf72-4211-a8a0-dc6a7baf3ff1";
var rootNode = new XElement(ns + "Content");

要获得您正在寻找的完整输出,您应该尝试:

    formssss   / AAAAAAA  

XNamespace ns = "uuid:5c2dffe6-cf72-4211-a8a0-dc6a7baf3ff1";
var rootNode = new XElement(ns + "Content",
    new XElement(ns+"redirect",
        new XElement(ns+"key", "formssss"),
        new XElement(ns+"value", "/AAAAAAA")));

你不需要&#34; xlink&#34;命名空间,因为您没有在XML中引用它。

所有这些元素都在同一个命名空间中。如果此代码不生成&#34; xmlns&#34;在根上的元素,然后我很惊讶,稍后会看。