我想要做的是仅对指定的根元素使用react。例如,如果用户发送如下所示的 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”时使用react?
最佳答案
好吧,我终于得到答案了。这是因为 XmlStream 本身。只要主根元素未关闭,连接就处于事件状态(例如: <stream/>
)。其中的所有内容都是 XPath 的根元素,这就是为什么“/auth”意味着 <stream><auth></auth></stream>
.
关于python - XmlStream.addObserver 中的 XPath 无法按应有的方式工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/373189/