我正在查看XMPP協議並測試與服務器的一些基本交互。 XMPP通過向前和向後交換XML進行交互,但是此XML是正在進行的流的一部分,可以有效地構建文檔。XmlWriter離開元素打開
我試圖用XmlWriter重現這一點,儘管我可以根據需要創建Xml,但似乎無法阻止作者關閉Xml元素。例如,要打開連接,您發送一個<stream:stream ... >
元素(在交互的稍後時間點關閉)。使用XmlWriter將始終關閉此元素,例如:<stream:stream ... />
,這是我不想要的,因爲發送關閉/>
將導致服務器關閉流。
有沒有辦法讓XmlWriter離開元素「打開」,但仍檢索包含在內的數據?當然,我可以在元素上做一個字符串替換來擺脫'/',但如果可能的話,我寧願找到一個更好的方法。
最初的消息發送到服務器看起來是這樣的: <?xml version="1.0" encoding="utf-8"?><stream:stream from="[email protected]" to="address.com" version="1.0" xml:lang="en" xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" >
到目前爲止,我的代碼是:
private string CreateStreamHeader(string from, string to, double version)
{
Encoding encoding = new UTF8Encoding(false);
var sb = new StringBuilder();
var settings = new XmlWriterSettings();
settings.Encoding = encoding;
using(var output = new StringWriterWithEncoding(sb, encoding))
{
using(XmlWriter writer = XmlWriter.Create(output, settings))
{
writer.WriteStartDocument();
writer.WriteStartElement("stream", "stream", "http://etherx.jabber.org/streams");
writer.WriteAttributeString("from", from);
writer.WriteAttributeString("to", to);
writer.WriteAttributeString("version", version.ToString("0.0"));
writer.WriteAttributeString("xml", "lang", null, "en");
writer.WriteAttributeString("xmlns", "jabber:client");
}
}
return sb.ToString();
}
而這個代碼產生: <?xml version="1.0" encoding="utf-8"?><stream:stream from="[email protected]" to="address.com" version="1.0" xml:lang="en" xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" />
< - 注意這裏的/>
注意:StringWriterWithEncoding是在this post
向我們展示您的代碼到目前爲止,或它的一個簡單的例子。 – gingerbreadboy 2012-03-21 08:48:19
@gingerbreadboy我已經更新它現在給一些更多的信息。希望這可以幫助。 – 2012-03-21 13:31:33