2011-12-14 14 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=" " /> 

である私がsoapenv:Headerからxmlns:soapenv=" "をなくすにはどうすればよいこの

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

のように作成しようとしていましたか?

ご協力いただければ幸いです。

+2

なぜこの属性を削除しますか?これは 'soapenv'という名前のXML名前空間を使用しているので必須です。 – BoltClock

答えて

3

どのようにするかは、不正な形式の(構文的に不正確な)XMLを作成することです。 XmlDocument APIはそれを行うようには設計されていません。

あなたは要素名を使用する場合

soapenv:Header 

soapenvxmlns:soapenv pseudoattributeを使用して、この要素(または祖先)で宣言された名前空間接頭辞、であることを意味します。宣言されていない場合、XML出力は自己尊重のXMLパーサーによって受け入れられません。

あなたが呼び出されるメソッドのシグネチャ、

xmlDocument.CreateElement(string1, string2); 

は2つの引数を取ります:要素の修飾名(接頭辞を含むことができ、それがないと、あなたのケースで);名前空間URI The documentation期待される出力が何であるかを示しています。次のXMLテキストに相当する要素に

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

結果次のC#コード

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

この要素に対する期待の名前空間URIは "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の名前空間も取得できますか?もう一度、サポートに感謝します。 –

+0

@ JinoJose:名前空間「ピップ」が何を表しているのか分かりません。 'pip:insert'はどこで知りましたか? – LarsH

+0

pipは、統合定義点を事前定義することを意味し、それはカスタムの名前空間URIでした。私はvallueを手に入れました。あなたの時間と助けてくれてありがとう。 –

0

を:

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

ので、それを使用します。だから、その名前空間URIでsoapenvプレフィックスを宣言したいと思うでしょう

xmlDocument.CreateElement("Header"); 
関連する問題