XmlStream.addObserver中的XPath不能正常工作

时间:2008-12-16 23:42:35

标签: python twisted

我想要做的是只对指定的根元素做出反应。例如,如果用户发送的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元素为根。

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

1 个答案:

答案 0 :(得分:1)

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