XML空白属性创建,':'的性格

本文关键字:空白 XML 属性 创建 | 更新日期: 2023-09-27 18:17:57

我正在尝试使用以下代码创建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/>

如何从soapenv:Header中剔除xmlns:soapenv=" " ?

任何帮助都将非常感激。

XML空白属性创建,':'的性格

您问的是如何创建格式错误(语法错误)的XML。XmlDocument API并没有设计成这样。

如果使用元素名

soapenv:Header

意味着soapenv是一个名称空间前缀,它已经使用xmlns:soapenv伪属性在此元素(或祖先)上声明。如果没有声明,您的XML输出将不会被任何自尊的XML解析器接受。

您调用的方法签名

xmlDocument.CreateElement(string1, string2);

接受两个参数:元素的限定名(可以包括前缀,就像你的例子一样);和名称空间URI。文档显示了预期的输出:

以下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);

不使用名称空间创建(例如使用默认名称空间),然后该部分将不需要:

xmlDocument.CreateElement("Header");