Мы должны будем инициализировать Firebase в функции onCreate класса Application.
package com.rocks.music.videoplayer;
import android.app.Application;
import android.content.Context;
import com.google.firebase.FirebaseApp;
/**
* Created by ashish123 on 22/8/15.
*/
public class MyApplication extends Application {
private static MyApplication mInstance;
@Override
public void onCreate() {
super.onCreate();
mInstance = this;
try {
FirebaseApp.initializeApp(this);
}
catch (Exception e) {
}
}
public static Context getInstance() {
return mInstance;
}
}
Код в файле манифеста: -
<application
android:name="com.rocks.music.videoplayer.MyApplication"
android:allowBackup="true"
android:icon="@drawable/app_icon"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
В наши дни самым популярным (и очень простым) вариантом является ElementTree API , который был включен в стандартную библиотеку с Python 2.5.
Доступные опции для которые являются:
Вот пример того, как сгенерировать ваш примерный документ с помощью in-stdlib cElementTree:
import xml.etree.cElementTree as ET
root = ET.Element("root")
doc = ET.SubElement(root, "doc")
ET.SubElement(doc, "field1", name="blah").text = "some value1"
ET.SubElement(doc, "field2", name="asdfasd").text = "some vlaue2"
tree = ET.ElementTree(root)
tree.write("filename.xml")
Я протестировал его, и он работает, но я предполагаю, что пробелы не значимы. Если вам нужен отпечаток «prettyprint», дайте мне знать, и я посмотрю, как это сделать. (Это может быть специфичный для LXML вариант. Я не использую реализацию stdlib много)
Для дальнейшего чтения здесь приведены некоторые полезные ссылки:
Как последнее замечание, либо cElementTree, либо LXML должны быть достаточно быстрыми для всех ваших потребностей (оба оптимизированы C-кодом ), но в случае, когда вы находитесь в ситуации, когда вам нужно выжать каждый последний бит производительности, тесты на сайте LXML показывают, что:
Для такой простой XML-структуры вы можете не захотеть использовать полномасштабный XML-модуль. Рассмотрим шаблон строки для простейших структур, или Jinja для чего-то более сложного. Jinja может обрабатывать переплетение списка данных для создания внутреннего xml вашего списка документов. Это немного сложнее с необработанными шаблонами строк python
. Для примера Jinja см. Мой ответ на аналогичный вопрос .
Вот пример генерации ваш файл xml с строковыми шаблонами.
import string
from xml.sax.saxutils import escape
inner_template = string.Template(' <field${id} name="${name}">${value}</field${id}>')
outer_template = string.Template("""<root>
<doc>
${document_list}
</doc>
</root>
""")
data = [
(1, 'foo', 'The value for the foo document'),
(2, 'bar', 'The <value> for the <bar> document'),
]
inner_contents = [inner_template.substitute(id=id, name=name, value=escape(value)) for (id, name, value) in data]
result = outer_template.substitute(document_list='\n'.join(inner_contents))
print result
Выход:
<root>
<doc>
<field1 name="foo">The value for the foo document</field1>
<field2 name="bar">The <value> for the <bar> document</field2>
</doc>
</root>
Недостатком подхода шаблона является то, что вы не получите escape <
и >
бесплатно. Я танцевал вокруг этой проблемы, вытаскивая утилиту из xml.sax
Библиотека lxml включает очень удобный синтаксис для генерации XML, называемый E-factory . Вот как я приведу пример:
#!/usr/bin/python
import lxml.etree
import lxml.builder
E = lxml.builder.ElementMaker()
ROOT = E.root
DOC = E.doc
FIELD1 = E.field1
FIELD2 = E.field2
the_doc = ROOT(
DOC(
FIELD1('some value1', name='blah'),
FIELD2('some value2', name='asdfasd'),
)
)
print lxml.etree.tostring(the_doc, pretty_print=True)
Выход:
<root>
<doc>
<field1 name="blah">some value1</field1>
<field2 name="asdfasd">some value2</field2>
</doc>
</root>
Он также поддерживает добавление к уже созданному узлу, например. после вышесказанного вы можете сказать
the_doc.append(FIELD2('another value again', name='hithere'))
getattr
, например, getattr(E, "some-tag")
.
– haridsv
30 March 2016 в 11:04
Yattag http://www.yattag.org/ или https://github.com/leforestier/yattag предоставляет интересный API для создания такого документа XML ( а также HTML-документы).
Использует ключевое слово context manager и with
.
from yattag import Doc, indent
doc, tag, text = Doc().tagtext()
with tag('root'):
with tag('doc'):
with tag('field1', name='blah'):
text('some value1')
with tag('field2', name='asdfasd'):
text('some value2')
result = indent(
doc.getvalue(),
indentation = ' '*4,
newline = '\r\n'
)
print(result)
, поэтому вы получите:
<root>
<doc>
<field1 name="blah">some value1</field1>
<field2 name="asdfasd">some value2</field2>
</doc>
</root>
Для простейшего выбора я бы пошел с мини-министром: http://docs.python.org/library/xml.dom.minidom.html . Он встроен в стандартную библиотеку python и прост в использовании в простых случаях.
Вот довольно простой учебник: http://www.boddie.org.uk/python/ XML_intro.html
import xml.etree.cElementTree as ET
,ImportError: No module named etree.cElementTree
- стандартный OSX 10.8 python, но как-то он работает, когда я запускаю его изнутри ipython. – guaka 26 December 2013 в 21:10xml_declaration=True
, если вы указываете кодировку ... но чтобы получить эквивалентное поведение, вызовитеtree.write()
, как this:tree.write("filename.xml", xml_declaration=True, encoding='utf-8')
Вы можете использовать любую кодировку, если вы явно указываете ее. (ascii
заставит все символы Юникода за пределами 7-разрядного набора ASCII быть закодированным сущностью, если вы не доверяете правильному настройке веб-сервера). – ssokolow 22 January 2016 в 04:43