代码之家  ›  专栏  ›  技术社区  ›  Zath

xmlstream.addobserver中的xpath无法正常工作

  •  1
  • Zath  · 技术社区  · 16 年前

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

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

    我的方法。应该执行身份验证。我用名为inside connectionmade方法的addobserver方法完成了这项工作。

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

    afaik xpath-如果我写了“/auth”,这意味着我希望根元素是“auth”,因此消息:

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

    …应该被拒绝,因为auth不是根。

    但是Twisted并不能像我认为的那样工作-我的auth方法是在第二条消息出现时执行的(树中有auth元素),而不是第一条消息-auth元素作为根。

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

    1 回复  |  直到 16 年前
        1
  •  1
  •   Zath    16 年前

    好的,我终于知道答案了。这是因为xmlstream本身。只要主根元素没有关闭,连接就处于活动状态(例如: <stream/> )它内部的所有内容都是xpath的根元素,这就是为什么“/auth”意味着 <stream><auth></auth></stream> .