【问题标题】:XPath in XmlStream.addObserver doesn't work the way it shouldXmlStream.addObserver 中的 XPath 无法正常工作
【发布时间】:2008-12-16 23:42:35
【问题描述】:

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

【问题讨论】:

    标签: python twisted


    【解决方案1】:

    好的,我终于得到了答案。这是因为 XmlStream 本身。只要主根元素未关闭,连接就处于活动状态(例如:&lt;stream/&gt;)。其中的所有内容都是 XPath 的根元素,这就是为什么“/auth”表示&lt;stream&gt;&lt;auth&gt;&lt;/auth&gt;&lt;/stream&gt;

    【讨论】:

      猜你喜欢
      • 2013-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-17
      • 2011-12-22
      • 1970-01-01
      相关资源
      最近更新 更多