1

我想做的是只对指定的根元素做出反应。例如,如果用户发送如下所示的 XmlStream:

<auth>
    <login>user</login>
    <pass>dupa.8</pass>
</auth>

我的方法 ._auth 应该被执行。我已经使用在 connectionMade 方法中调用的 addObserver 方法完成了它。

self.addObserver("/auth", self._auth)

AFAIK XPath - 如果我写“/auth”,这意味着我希望我的根元素是“auth”,所以该消息:

<longtagislong>
    <auth>...</auth>
</longtagislong>

...应该被拒绝,因为 auth 不是 root。

但是,Twisted 并没有按照我认为的方式工作——我的 _auth 方法在第二条消息出现时执行(树中有 auth 元素),而不是第一条消息——以 auth 元素为根。

所以,我的问题是:如何告诉 Twisted 和 addObserver 方法我只想在根元素的名称是“auth”时做出反应?

4

1 回答 1

1

好的,我终于得到了答案。这是因为 XmlStream 本身。只要主根元素未关闭,连接就处于活动状态(例如:<stream/>)。它里面的所有东西都是 XPath 的根元素,这就是为什么“/auth”意味着<stream><auth></auth></stream>.

于 2008-12-17T13:40:33.837 回答