Avatar billede Hans1 Praktikant
05. juli 2012 - 16:54 Der er 12 kommentarer

Android søg i XML

Hey

Hvordan starter jeg på at lave en Android App som søger i en XML fil på eksempelvis name attributten?

Er det muligt at xml filen kan ligge i src mappen? eller skal den ligge på telefonen?


<phonebook>
<person>
<name>Jens Jensen</name>
<title>Direktør</title>
<phone>12345678</phone>
</person>
</phonebook
Avatar billede arne_v Ekspert
05. juli 2012 - 17:07 #1
Android understoetter de gaengse Java XML API'er, saa det er ikke noget problem at hive data ud af en XML fil.

Om XML filen skal ligge paa telefonen eller paa en server maa afhaenge af hvad den skal bruges til.
Avatar billede Hans1 Praktikant
05. juli 2012 - 17:14 #2
Okay, det lyder godt.

I første omgang havde jeg tænkt at filen skulle ligge på telefonen.
Senere kan den så udbygges til at hente en opdateret version online når netværk er tilgængeligt når programmet starter.

Men jeg ved virkelig ikke hvordan jeg starter.
Jeg har kun lige fået installeret Eclipse med ADT plugin'et og Android SDK'et.

Ville det være en god idé at først at starte med at kunne hente indhold via XML og så senere tilføje søgefunktionen.
Avatar billede arne_v Ekspert
05. juli 2012 - 20:31 #3
Har du erfaring med programmering i Java?
Avatar billede Hans1 Praktikant
05. juli 2012 - 20:35 #4
Nej
Avatar billede arne_v Ekspert
05. juli 2012 - 20:44 #5
saa bliver det jo noget af en opgave at skrive en Android app i java
Avatar billede arne_v Ekspert
05. juli 2012 - 20:45 #6
men du kan vel starte med at lave:
- Android hello world
- noget Java kode som parser XML
med henblik paa at kombinere dem.
Avatar billede Hans1 Praktikant
06. juli 2012 - 13:09 #7
Jeg har fundet en guide på youtube hvor der søges i en XML fil.
Men jeg får fejl når jeg skriver efter.

Er du god til java?
Avatar billede arne_v Ekspert
06. juli 2012 - 14:52 #8
Jeg har en del erfaring med Java.
Avatar billede Hans1 Praktikant
06. juli 2012 - 15:05 #9
Okay.

Jeg har tilføjet denne kode til mit Eclipse projekt fra denne her side: http://android-er.blogspot.dk/2010/04/read-xml-resources-in-android-using.html

Problemet er nu for det første at tilpasse det til min XML fil.
Hvordan får jeg fx kun udskrevet name og title fra mit XML dokument i stedet for alle tre via:


stringBuffer.append("\nTEXT: "+xpp.getText());
Avatar billede arne_v Ekspert
06. juli 2012 - 16:35 #10
Du tester paa xpp.getName og udskriver kun hvis det matcher hvad du vil have.

Jeg ville nok overveje er andet XML API end dette. Det er et meget effektivt API til store XML filer, men kode bliver noget snask.

Almindelig DOM og XPath giver paenere kode.
Avatar billede Hans1 Praktikant
09. juli 2012 - 16:36 #11
Hvordan laver jeg det med DOM?
Avatar billede arne_v Ekspert
09. juli 2012 - 20:16 #12
standalone eksempel:

import java.io.IOException;
import java.io.StringReader;

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;

import org.w3c.dom.DOMException;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

public class EasyXml {
    public static void main(String[] args) throws SAXException, IOException, ParserConfigurationException, DOMException, TransformerException, XPathExpressionException {
        String xml = "<phonebook><person><name>Jens Jensen</name><title>Direktør</title><phone>12345678</phone></person></phonebook>";
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        Document doc = dbf.newDocumentBuilder().parse(new InputSource(new StringReader(xml)));
        XPath xpath = XPathFactory.newInstance().newXPath();
        String name = ((Node)xpath.evaluate("/phonebook/person[phone='12345678']/name/text()", doc.getDocumentElement(), XPathConstants.NODE)).getNodeValue();
        System.out.println(name);
    }
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester