for event, element in etree.iterparse(path_to_file, tag="BlogPost"):
for child in element:
print child.tag, child.text
element.clear()
окончательное очищение остановит вас от использования слишком большого количества памяти.
[update:], чтобы получить «все между ... как строку», я думаю, вы хотите один из:
for event, element in etree.iterparse(path_to_file, tag="BlogPost"):
print etree.tostring(element)
element.close()
или
for event, element in etree.iterparse(path_to_file, tag="BlogPost"):
print ''.join([etree.tostring(child) for child in element])
element.close()
или, возможно, даже:
for event, element in etree.iterparse(path_to_file, tag="BlogPost"):
print ''.join([child.text for child in element])
element.close()
ОБНОВЛЕНИЕ: перейти к официальному и рекомендованному способу делать это вместо hacky и неофициальный подход для предотвращения / предотвращения неизвестных проблем. Из моего ответа здесь .
На самом деле в документации есть часть
:Получение сообщений от нескольких отправителей
FCM позволяет нескольким сторонам отправлять сообщения в одно и то же клиентское приложение. Например, предположим, что клиентское приложение является агрегатором статьи с несколькими вкладчиками, и каждый из них должен иметь возможность отправлять сообщение при публикации новой статьи. Это сообщение может содержать URL-адрес, чтобы клиентское приложение могло загрузить статью. Вместо того, чтобы централизовать всю операцию отправки в одном месте, FCM дает вам возможность разрешать каждому из этих авторов отправлять свои собственные сообщения.
Чтобы сделать это возможным, убедитесь, что каждый отправитель генерирует свой собственный идентификатор отправителя . Информацию о том, как получить идентификатор отправителя FCM, см. В документации клиента для вашей платформы. При запросе регистрации клиентское приложение извлекает токен несколько раз, каждый раз с другим идентификатором отправителя в поле аудитории.
Наконец, поделитесь регистрационным маркером с соответствующими серверами приложений (чтобы завершить работу с клиентом регистрации / серверное рукопожатие), и они смогут отправлять сообщения в клиентское приложение, используя свои собственные ключи аутентификации.
Обратите внимание, что существует ограничение на 100 отправителей.
blockquote>Я думаю, что запутанная, но важная часть здесь:
При запросе регистрации клиентское приложение извлекает токен несколько раз, каждый раз с другим идентификатором отправителя в поле аудитории.
< / blockquote>Другими словами, вам нужно будет вызвать
getToken()
, передавая идентификатор отправителя, и просто"FCM"
(например,getToken("2xxxxx3344", "FCM")
) в качестве параметров. Вам нужно будет убедиться, что вы вызываете это для каждого отправителя (проекта), который вам нужен.Также обратите внимание на
getToken()
документы:Это блокирующая функция, поэтому не вызывайте ее в основном потоке.
blockquote>Некоторые дополнительные преимущества:
- Он не выполняет автоматическое повторное попытку, если он не работает как и по умолчанию.
- Он возвращает исключение IOException, когда он терпит неудачу.
По состоянию на декабрь 2016 года существует очень простой, не хакерский способ сделать это, который все еще работает сейчас (июль 2018).
FirebaseOptions options = new FirebaseOptions.Builder()
.setApplicationId("1:something:android:something_else") // Required for Analytics.
.setApiKey("your apikey") // Required for Auth.
.setDatabaseUrl("https://your-database.firebaseio.com/") // Required for RTDB.
.build();
FirebaseApp.initializeApp(this /* Context */, options, "secondary");
Источник: Официальный блог Firebase
google-services.json
. Ура! – AL. 21 October 2016 в 12:51