How to set up a sqlite database from complicated xml?
I am building an Android app which will use a sqlite database that I create using xml data.
I have done this before with simpler xml documents and the approach for this one has me a little stumped.
The app is a verb conjugation app, and here is an example of one of the verbs:
<word>
<key>aparcar</key>
<definition>to deposit (arms); to park</definition>
<conjugation>
<tense type="Infinitivo">aparcar</tense>
<tense type="Participio">aparcado</tense>
<tense type="Gerundio">aparcando</tense>
<tense type="Presente">
<person type="first_person">aparco</person>
<person type="second_person">aparcas</person>
<person type="third_person">aparca</person>
<person type="first_person_plural">aparcamos</person>
<person type="second_person_plural">aparcáis</person>
<person type="third_person_plural">aparcan</person>
</tense>
<tense type="Imperfecto">
<person type="first_person">aparcaba</person>
<person type="second_person">aparcabas</person>
<person type="third_person">aparcaba</person>
<person type="first_person_plural">aparcábamos</person>
<person type="second_person_plural">aparcabais</person>
<person type="third_person_plural">aparcaban</person>
</tense>
<tense type="Pretérito">
<person type="first_person">aparqué</person>
<person type="second_person">aparcaste</person>
<person type="third_person">aparcó</person>
<person type="first_person_plural">aparcamos</person>
<person type="second_person_plural">aparcasteis</person>
<person type="third_person_plural">aparcaron</person>
</tense>
<tense type="Futuro">
<person type="first_person">aparcaré</person>
<person type="second_person">aparcarás</person>
<person type="third_person">aparcará</person>
<person type="first_person_plural">aparcaremos</person>
<person type="second_person_plural">aparcaréis</person>
<person type="third_person_plural">aparcarán</person>
</tense>
<tense type="Subjunctivo">
<person type="first_开发者_C百科person">aparque</person>
<person type="second_person">aparques</person>
<person type="third_person">aparque</person>
<person type="first_person_plural">aparquemos</person>
<person type="second_person_plural">aparquéis</person>
<person type="third_person_plural">aparquen</person>
</tense>
<tense type="Subjunctivo_Pretérito">
<person type="first_person">aparcara</person>
<person type="second_person">aparcaras</person>
<person type="third_person">aparcara</person>
<person type="first_person_plural">aparcáramos</person>
<person type="second_person_plural">aparcarais</person>
<person type="third_person_plural">aparcaran</person>
</tense>
<tense type="Subjunctivo_Pretérito">
<person type="first_person">aparcare</person>
<person type="second_person">aparcares</person>
<person type="third_person">aparcare</person>
<person type="first_person_plural">aparcáremos</person>
<person type="second_person_plural">aparcareis</person>
<person type="third_person_plural">aparcaren</person>
</tense>
<tense type="Condicional">
<person type="first_person">aparcaría</person>
<person type="second_person">aparcarías</person>
<person type="third_person">aparcaría</person>
<person type="first_person_plural">aparcaríamos</person>
<person type="second_person_plural">aparcaríais</person>
<person type="third_person_plural">aparcarían</person>
</tense>
<tense type="Imperativo">
<person type="first_person"></person>
<person type="second_person">aparca</person>
<person type="third_person">aparque</person>
<person type="first_person_plural">aparquemos</person>
<person type="second_person_plural">aparcad</person>
<person type="third_person_plural">aparquen</person>
</tense>
Parsing the key and definition into a database is trivial. It is when I get to the tenses that I am unsure what to do. My first strategy was to do as I had done xml parsing in the past - to write a class that extends DefaultHandler and use logic such as:
public void startElement(String namespaceURI, String localName,
String qName, Attributes atts) throws SAXException {
if (localName.equals("word")) {
this.wordTag = true;
}
}
and
public void characters(char ch[], int start, int length) {
if (this.wordTag) {
verb.setWord(new String(ch, start, length));
}
}
This is not bad if there are only a couple of elements, but with elements such as that have many different attributes using boolean flags becomes really cumbersome quickly. I feel like there has to be a better way.
I have the firefox sqlite plugin. but it doesn't seem to parse the xml correctly when I import it.
So - part one of my question is what is the best way to get this information into a sqlite database?
And part two - is using a seperate column for each verb conjugation the best way to set up the database? This approach ends up with ~50 columns, which seems excessive.
Thanks.
精彩评论