我正在尝试使用以下代码创建一个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
?
非常感谢任何帮助。
答案 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");