XPath в XmlStream.addObserver работает не так, как должен

1

Что я хочу сделать, так это реагировать только на определенные корневые элементы. Например, если пользователь отправляет 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"?

Теги:
twisted

1 ответ

1
Лучший ответ

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню