【问题标题】:Java, from XMPP server response string to XML DocumentJava,从 XMPP 服务器响应字符串到 XML 文档
【发布时间】:2011-10-08 15:28:45
【问题描述】:

我有一个连接到 XMPP 服务器的客户端,服务器将答案发送给我

<?xml version="1.0"?><stream:stream id="119B61FB" from="chat.facebook.com" version="1.0" xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" xml:lang="en">

我尝试使用Document 类创建XMLDocument

try {
        parser = factory.newDocumentBuilder();
        d = parser.parse(new ByteArrayInputStream(cleanXMLString.getBytes("UTF-8")));
    } catch (ParserConfigurationException ex) {
        Logger.getLogger(XMPPManager.class.getName()).log(Level.SEVERE, null, ex);
    } catch (SAXException ex) {
        Logger.getLogger(XMPPManager.class.getName()).log(Level.SEVERE, null, ex);
    }

但我得到了错误:

org.xml.sax.SAXParseException: XML document structures must start and end within the same entity of the SAXException.

有一种方法可以禁用这个限制,因为文档没有被&lt;/stream:stream&gt;标签关闭是正常的?

【问题讨论】:

    标签: java xml string xmpp document


    【解决方案1】:

    这是您在实施 XMPP 时遇到的众多问题中的第一个。

    您将需要一个增量 XML 解析器,例如 James Clark 的 XP。更好的是使用来自list on xmpp.org 的现有 XMPP 库用于 Java。

    【讨论】:

    • 谢谢,但我尝试了一个演示,发现需要使用有效的 XML 文档。我已经通过在解析之前手动在字符串中添加结束标记来解决它。
    • 这种方法可以为您工作几个小时。明天,在您编写了一个可以工作但不正确的尖括号解析器以便您可以判断何时将您认为的完整文档放入 XML 解析器之后,您将意识到您将需要一个新的 XML每个节的解析器,这是一个 ton 的内存。说真的,我已经编写了多个 XMPP 客户端和客户端库。心痛在于你正在走的路。
    【解决方案2】:

    尝试使用Smack 在您的服务器和客户端之间进行通信。它将为您处理所有低级通信,并允许您在更具功能性的抽象级别进行编程。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-24
    • 2011-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多