我想要做的是只对指定的根元素做出反应。例如,如果用户发送的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方法?
答案 0 :(得分:1)
好的,最后我得到了答案。这是因为XmlStream本身。只要主根元素未关闭(例如:<stream/>
),连接就会处于活动状态。其中的所有内容都是XPath的根元素,这就是为什么“/ auth”意味着<stream><auth></auth></stream>
。