XPath в XmlStream.addObserver работает не так, как должен - PullRequest
1 голос
/ 17 декабря 2008

Что я хочу сделать, это реагировать только на указанные корневые элементы. Например, если пользователь отправляет XmlStream, который выглядит следующим образом:

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

Мой метод ._auth должен быть выполнен. Я сделал это с помощью метода addObserver, вызываемого внутри метода connectionMade.

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

AFAIK XPath - если я пишу "/ auth", это означает, что я хочу, чтобы мой корневой элемент был "auth", поэтому сообщение:

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

... должно быть отклонено, потому что auth не root.

Но Twisted, однако, не работает так, как я думал - метод _auth выполняется, когда появляется второе сообщение (с элементом auth внутри дерева), а не первое - с элементом auth в качестве корня.

Итак, мой вопрос: как сообщить Twisted и методу addObserver, что я хочу реагировать только в том случае, если имя корневого элемента равно «auth»?

1 Ответ

1 голос
/ 17 декабря 2008

Хорошо, наконец-то я получил ответ. Это из-за самого XmlStream. Соединение активно, пока основной корневой элемент не закрыт (например: <stream/>). Все внутри него является корневым элементом для XPath, поэтому «/ auth» означает <stream><auth></auth></stream>.

...