XML空白属性创建,问题为':'字符

时间:2011-12-14 18:06:40

标签: c# xml creation

我正在尝试使用以下代码创建一个xml。

XmlDocument xmlDocument = new XmlDocument();

XmlProcessingInstruction xPI = xmlDocument.CreateProcessingInstruction("xml", "version='1.0' encoding='UTF-8'");
xmlDocument.AppendChild(xPI);

XmlElement xElmntheader = xmlDocument.CreateElement("soapenv:Header", " ");
xmlDocument.AppendChild(xElmntheader);

MemoryStream ms = new MemoryStream();
xmlDocument.Save(ms);

string text = System.Text.Encoding.GetEncoding("UTF-8").GetString(ms.GetBuffer(), 0, (int)ms.Length);

输出

<xml version='1.0' encoding='UTF-8'?>
<soapenv:Header xmlns:soapenv=" " />

我试图像这样创作

<xml version='1.0' encoding='UTF-8'?>
<soapenv:Header/>

如何从xmlns:soapenv=" "消除soapenv:Header

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

您要问的是如何创建格式错误(语法错误)的XML。 XmlDocument API不是为此而设计的。

如果使用元素名称

soapenv:Header

这意味着soapenv是一个名称空间前缀,它已使用xmlns:soapenv pseudoattribute在此元素(或祖先)上声明。如果尚未声明,则任何自尊的XML解析器都不会接受您的XML输出。

您调用的方法签名

xmlDocument.CreateElement(string1, string2);

有两个参数:元素的限定名称(可能包含前缀,就像你的情况一样);和名称空间URI。 The documentation显示预期的输出结果:

  

以下C#代码

XmlElement elem;
elem = doc.CreateElement("xy:item", "urn:abc");
     

会生成一个与以下XML文本等效的元素。

<xy:item xmlns:item="urn:abc"/>

此元素的预期名称空间URI是“http://schemas.xmlsoap.org/soap/envelope/”。因此,您需要使用该命名空间URI声明soapenv前缀:

string soapNSURI = "http://schemas.xmlsoap.org/soap/envelope/";

并使用它:

XmlElement xElmntheader = xmlDocument.CreateElement("soapenv:Header", soapNSURI);

答案 1 :(得分:0)

在没有命名空间的情况下创建(例如使用默认命名空间),然后该部分就没有必要:

xmlDocument.CreateElement("Header");