2011-12-14 56 views
0

我想用下面的代碼創建一個XML。創建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:Headerxmlns:soapenv=" "

任何幫助將不勝感激。

+2

爲什麼要消除該屬性?由於您使用名爲`soapenv`的XML名稱空間,因此這是必需的。 – BoltClock 2011-12-14 18:08:44

回答

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); 
+0

感謝您的回覆。當我添加URI時,它對我有用。我試圖再做一次插入。 XmlElement xElmntinsert = xmlDocument.CreateElement(「pip:insert」,「」); xElmntbody.AppendChild(xElmntinsert);我可以獲得pip的命名空間嗎?再次感謝您的支持。 – 2011-12-14 20:18:56

0

創建沒有命名空間(如使用默認命名空間),然後該部分將不必要:

xmlDocument.CreateElement("Header");