XPath в XMLStream.addObserver работает не так, как следовало бы

StackOverflow https://stackoverflow.com/questions/373189

  •  22-08-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top