【问题标题】:XmlWriter leave element openXmlWriter 使元素保持打开状态
【发布时间】:2012-04-05 18:28:53
【问题描述】:

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

我尝试使用 XmlWriter 来重现这一点,虽然我几乎可以完全按照要求创建 Xml,但我似乎无法阻止编写器关闭 Xml 元素。例如,要打开连接,您发送一个<stream:stream ... > 元素(将在交互的稍后时间关闭)。使用 XmlWriter 将始终关闭此元素,例如:<stream:stream ... />,这是我不想要的,因为发送关闭 /> 会导致服务器关闭流。

有没有办法让 XmlWriter 保持元素“打开”但仍检索其中包含的数据?当然,我可以对元素进行字符串替换以摆脱“/”,但如果可能的话,我更愿意找到一种更简洁的方法。

发送到服务器的初始消息如下所示: <?xml version="1.0" encoding="utf-8"?><stream:stream from="email@address.com" 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@address.com" to="address.com" version="1.0" xml:lang="en" xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" />

注意:StringWriterWithEncoding 是this post中解释的那个

【问题讨论】:

  • 向我们展示您目前的代码,或它的简化示例。
  • @gingerbreadboy 我已经更新它以提供更多信息。希望这会有所帮助。

标签: c# xml xmpp xmlwriter


【解决方案1】:

您可能应该考虑链接到xmpp.org 的现有库之一。将命名空间声明视为属性会在以后再次困扰您。

至于你的问题,手动序列化stream:stream 开始标签,并且只使用 XmlWriter 完整的节。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-14
    • 2013-01-27
    • 2017-06-02
    • 1970-01-01
    相关资源
    最近更新 更多