Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# XmlWriter使元素保持打开状态_C#_Xml_Xmpp_Xmlwriter - Fatal编程技术网

C# XmlWriter使元素保持打开状态

C# XmlWriter使元素保持打开状态,c#,xml,xmpp,xmlwriter,C#,Xml,Xmpp,Xmlwriter,我正在研究XMPP协议,并测试与服务器的一些基本交互。 XMPP通过向前和向后交换XML进行交互,但该XML是一个正在进行的流的一部分,可以有效地在进行过程中构建文档 我已经尝试使用XmlWriter来重现这一点,尽管我可以几乎完全按照需要创建Xml,但我似乎无法阻止编写器关闭Xml元素。例如,要打开连接,您需要发送一个元素(稍后在交互过程中关闭)。使用XmlWriter将始终关闭此元素,例如:,我不希望这样,因为发送关闭/>将导致服务器关闭流 有没有办法让XmlWriter保持元素“打开”,但

我正在研究XMPP协议,并测试与服务器的一些基本交互。 XMPP通过向前和向后交换XML进行交互,但该XML是一个正在进行的流的一部分,可以有效地在进行过程中构建文档

我已经尝试使用XmlWriter来重现这一点,尽管我可以几乎完全按照需要创建Xml,但我似乎无法阻止编写器关闭Xml元素。例如,要打开连接,您需要发送一个
元素(稍后在交互过程中关闭)。使用XmlWriter将始终关闭此元素,例如:
,我不希望这样,因为发送关闭
/>
将导致服务器关闭流

有没有办法让XmlWriter保持元素“打开”,但仍然检索其中包含的数据?当然,我可以在元素上进行字符串替换来去掉“/”,但如果可能的话,我更愿意找到一种更简洁的方法来完成这项工作

要发送到服务器的初始消息如下所示:

到目前为止,我的代码是:

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();
}
该代码生成:
这里


<> >注释:StrutWrror编码是在

中解释的一个,您应该考虑现有的一个与AT链接的库。将名称空间声明视为属性会在以后困扰您


至于您的问题,请手动序列化
stream:stream
start标记,并且只在完整的小节中使用XmlWriter。

向我们展示您的代码,或者它的一个简化示例。@gingerbreadboy我已经更新了它,以提供更多信息。希望这有帮助。