R
Rotesmofa
Erfahrenes Mitglied
- 20
Hallo Jungs,
ich schlage mich gerade mit dem Simple XML Framework rumm.
Meine Aufgabe ist es eine XML Datei einzulesen und von dort aus Daten für ein Gerät das mehrere Kanäle mit verschiedenen Eigenschaften hat auszulesen. Diese Eigenschaften hätte ich gerne als Objekt direkt in Java abgelegt.
Das Simple Framework bietet hier keine Lösung oder bin ich da auf dem Holzweg?
So wie ich das bisher überblicke muss ich das XML File einlesen und in eine Variable ablegen lassen. Um dann die einzelnen Elemente ansprechen zu können muss ich schon vorher jedes einzelne Objekt in einer Eigenen Klasse beschrieben haben.
Hier meine Sourcen aus einem SimpleXML tutorial:
Das XML File: http://dl.dropbox.com/u/7215751/JavaCodeGeeks/AndroidFullAppTutorialPart03/Transformers+2007.xml
Um nochmal zu konkretisieren ich möchte aus meinem Code direkt den Wert für das rating für Movie Element 1 auslesen. Wie gehe ich das am geschicktesten an?
Gruß
euer
Rotesmofa
ich schlage mich gerade mit dem Simple XML Framework rumm.
Meine Aufgabe ist es eine XML Datei einzulesen und von dort aus Daten für ein Gerät das mehrere Kanäle mit verschiedenen Eigenschaften hat auszulesen. Diese Eigenschaften hätte ich gerne als Objekt direkt in Java abgelegt.
Das Simple Framework bietet hier keine Lösung oder bin ich da auf dem Holzweg?
So wie ich das bisher überblicke muss ich das XML File einlesen und in eine Variable ablegen lassen. Um dann die einzelnen Elemente ansprechen zu können muss ich schon vorher jedes einzelne Objekt in einer Eigenen Klasse beschrieben haben.
Hier meine Sourcen aus einem SimpleXML tutorial:
Code:
package com.javacodegeeks.xml.bind;
import java.io.IOException;
import java.io.Reader;
import java.io.StringReader;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.simpleframework.xml.Serializer;
import org.simpleframework.xml.core.Persister;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;
import com.javacodegeeks.xml.bind.model.Image;
import com.javacodegeeks.xml.bind.model.OpenSearchDescription;
public class SimpleExampleActivity extends Activity {
private static final String url =
"http://dl.dropbox.com/u/7215751/JavaCodeGeeks/AndroidFullAppTutorialPart03/Transformers+2007.xml";
private DefaultHttpClient client = new DefaultHttpClient();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
try {
String xmlData = retrieve(url);
Serializer serializer = new Persister();
Reader reader = new StringReader(xmlData);
OpenSearchDescription osd = serializer.read(OpenSearchDescription.class, reader, false);
Log.d(SimpleExampleActivity.class.getSimpleName(), osd.toString());
Toast.makeText(this, osd.toString(), Toast.LENGTH_LONG).show();
}
catch (Exception e) {
Toast.makeText(this, "Error Occured", Toast.LENGTH_LONG).show();
}
}
public String retrieve(String url) {
HttpGet getRequest = new HttpGet(url);
try {
HttpResponse getResponse = client.execute(getRequest);
final int statusCode = getResponse.getStatusLine().getStatusCode();
if (statusCode != HttpStatus.SC_OK) {
return null;
}
HttpEntity getResponseEntity = getResponse.getEntity();
if (getResponseEntity != null) {
return EntityUtils.toString(getResponseEntity);
}
}
catch (IOException e) {
getRequest.abort();
Log.w(getClass().getSimpleName(), "Error for URL " + url, e);
}
return null;
}
}
Code:
package com.javacodegeeks.xml.bind.model;
import org.simpleframework.xml.Attribute;
import org.simpleframework.xml.Element;
@Element
public class Query {
@Attribute
public String searchTerms;
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("Query [searchTerms=");
builder.append(searchTerms);
builder.append("]");
return builder.toString();
}
}
Code:
package com.javacodegeeks.xml.bind.model;
import java.util.List;
import org.simpleframework.xml.Element;
import org.simpleframework.xml.ElementList;
import org.simpleframework.xml.Root;
@Root
public class OpenSearchDescription {
@Element(name="Query")
public Query query;
@Element
public int totalResults;
@ElementList
public List<Movie> movies;
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
/*builder.append("OpenSearchDescription [movies=");
builder.append(movies);
builder.append(", query=");
builder.append(query);*/
builder.append(totalResults);
return builder.toString();
}
}
Code:
package com.javacodegeeks.xml.bind.model;
import java.util.List;
import org.simpleframework.xml.Element;
import org.simpleframework.xml.ElementList;
@Element(name="movie")
public class Movie {
@Element(required=false)
public String score;
@Element(required=false)
public String popularity;
@Element(required=false)
public String name;
@Element(required=false)
public String id;
@Element(required=false)
public String biography;
@Element(required=false)
public String url;
@Element(required=false)
public String version;
@Element(required=false)
public String lastModifiedAt;
@ElementList
public List<Image> images;
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("Movie [biography=");
builder.append(biography);
builder.append(", id=");
builder.append(id);
builder.append(", images=");
builder.append(images);
builder.append(", lastModifiedAt=");
builder.append(lastModifiedAt);
builder.append(", name=");
builder.append(name);
builder.append(", popularity=");
builder.append(popularity);
builder.append(", score=");
builder.append(score);
builder.append(", url=");
builder.append(url);
builder.append(", version=");
builder.append(version);
builder.append("]");
return builder.toString();
}
}
Code:
package com.javacodegeeks.xml.bind.model;
import org.simpleframework.xml.Attribute;
import org.simpleframework.xml.Element;
@Element(name="image")
public class Image {
@Attribute
public String type;
@Attribute
public String url;
@Attribute
public String size;
@Attribute
public int width;
@Attribute
public int height;
@Attribute
public String id;
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("Image [height=");
builder.append(height);
builder.append(", id=");
builder.append(id);
builder.append(", size=");
builder.append(size);
builder.append(", type=");
builder.append(type);
builder.append(", url=");
builder.append(url);
builder.append(", width=");
builder.append(width);
builder.append("]");
return builder.toString();
}
}
Das XML File: http://dl.dropbox.com/u/7215751/JavaCodeGeeks/AndroidFullAppTutorialPart03/Transformers+2007.xml
Um nochmal zu konkretisieren ich möchte aus meinem Code direkt den Wert für das rating für Movie Element 1 auslesen. Wie gehe ich das am geschicktesten an?
Gruß
euer
Rotesmofa