1

私がやりたいことは、指定されたルート要素にのみ反応することです。たとえば、ユーザーが次のような 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>

...認証はルートではないため、拒否する必要があります。

しかし、Twisted は思ったように動作しません - 私の _auth メソッドは、最初のメッセージではなく、2 番目のメッセージ (ツリー内の auth 要素) が表示されたときに実行されます - auth 要素をルートとして使用します。

だから、私の質問は: ルート要素の名前が「auth」の場合にのみ反応したいことを Twisted と addObserver メソッドに伝える方法は?

4

1 に答える 1

1

さて、ようやく答えが出ました。XmlStream自体が原因です。メインルート要素が閉じられていない限り、接続はアクティブです(例:) <stream/>。その中のすべてがXPathのルート要素であるため、「/auth」はを意味し<stream><auth></auth></stream>ます。

于 2008-12-17T13:40:33.837 に答える