我正在尝试使用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>
如您所见,我缺少属性名称空间
有人可以帮忙吗?
答案 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;在根上的元素,然后我很惊讶,稍后会看。