| |||||||
Das Thema "Probleme beim lesen einer XML Datei" befindet sich unter Android App Entwicklung auf Android-Hilfe.de.
|
| | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Android-Hilfe.de Mitglied Modell: Samsung Galaxy S2 (I9100) Registriert seit: 27.03.2010
Beiträge: 58
Abgegebene Danke: 3
Erhielt 1 Danke für 1 Beitrag
| ich möchte, wie unten zu sehen, eine XML Datei auslesen. Dafür nutze ich den SAXParser und den DefaultHandler. Er liest einige der Daten aus aber nicht alle. Zum Beispiel bekomme ich nie das Feld "locked" ausgelesen, weil er nicht einmal in den Knoten reingeht, obwohl im Defaulthandler "locked" gefunden wurde. Vllt könnt ihr mir da weiterhelfen. Unten führe ich die nötigen Dateien auf. Code: <time-entries type="array"> <time-entry> <id type="integer">8295580</id> <date-at type="date">2011-09-03</date-at> <minutes type="integer">120</minutes> <revenue type="float" nil="true"/> <project-id type="integer">491108</project-id> <locked type="boolean">true</locked> <service-id type="integer">160608</service-id> <user-id type="integer">39342</user-id> <created-at type="datetime">2011-09-02T20:05:50+02:00</created-at> <updated-at type="datetime">2011-09-03T13:21:33+02:00</updated-at> <billable type="boolean">false</billable> <note/> <user-name>Pascal geldmacher</user-name> <customer-id type="integer">137475</customer-id> <customer-name>deltra</customer-name> <project-name>Projekt #5</project-name> <service-name>Support</service-name> </time-entry> </time-entries> Code: InputStream is = entity.getContent(); SAXParserFactory spf = SAXParserFactory.newInstance(); SAXParser sp = spf.newSAXParser(); XMLReader reader = sp.getXMLReader(); TimeXMLHandler handler = new TimeXMLHandler(); reader.setContentHandler(handler); reader.parse(new InputSource(is)); is.close(); Code: @SuppressWarnings("unused")
public class TimeXMLHandler extends DefaultHandler {
private boolean time_entries = false;
private boolean time_entry = false;
private boolean id = false;
private boolean dateAt = false;
private boolean minutes = false;
private boolean billable = false;
private boolean note = false;
private boolean project_id = false;
private boolean project_name = false;
private boolean service_id = false;
private boolean service_name = false;
private boolean customer_id = false;
private boolean customer_name = false;
private boolean locked = false;
private boolean createdAt = false;
private boolean tracking = false;
private boolean trackingMinutes = false;
private String noted = "";
private String projName = "";
private String custName = "";
private String servName = "";
private ArrayList<TimeEntry> list = new ArrayList<TimeEntry>();
private TimeEntry entry = new TimeEntry();
public TimeXMLHandler(){
}
public ArrayList<TimeEntry> getTimeEntry(){
return this.list;
}
@Override
public void startDocument() throws SAXException {
}
@Override
public void endDocument() throws SAXException {
// Nothing to do
}
@Override
public void startElement(String namespaceURI, String localName,
String qName, Attributes atts) throws SAXException {
if(localName.equals("time-entries")){
this.time_entries = true;
}
else if(localName.equals("time-entry")){
this.entry = new TimeEntry();
this.time_entry = true;
}
else if(localName.equals("id")){
this.id = true;
}
else if(localName.equals("date-at")){
this.dateAt = true;
}
else if(localName.equals("minutes")){
if(this.tracking){
this.trackingMinutes = true;
this.entry.setTrackerID(1);
}
else{
this.minutes = true;
}
}
else if(localName.equals("billable")){
this.billable = true;
}
else if(localName.equals("locked")){
this.locked = true;
}
else if(localName.equals("customer-id")){
this.customer_id = true;
}
else if(localName.equals("customer-name")){
this.custName = "";
this.customer_name = true;
}
else if(localName.equals("project-id")){
this.project_id = true;
}
else if(localName.equals("project-name")){
this.projName = "";
this.project_name = true;
}
else if(localName.equals("service-id")){
this.service_id = true;
}
else if(localName.equals("service-name")){
this.servName = "";
this.service_name = true;
}
else if(localName.equals("created-at")){
this.createdAt = true;
}
else if(localName.equals("note")){
this.noted = "";
this.note = true;
}
else if(localName.equals("tracking")){
this.tracking = true;
}
}
@Override
public void endElement(String namespaceURI, String localName, String qName)
throws SAXException {
if(localName.equals("time-entries")){
this.time_entries = false;
}
else if(localName.equals("time-entry")){
this.list.add(this.entry);
this.time_entry = false;
}
else if(localName.equals("id")){
this.id = false;
}
else if(localName.equals("date-at")){
this.dateAt = false;
}
else if(localName.equals("minutes")){
if(this.tracking){
this.trackingMinutes = false;
}
else{
this.minutes = false;
}
}
else if(localName.equals("billable")){
this.billable = false;
}
else if(localName.equals("locked")){
this.locked = false;
}
else if(localName.equals("customer-id")){
this.customer_id = false;
}
else if(localName.equals("customer-name")){
this.entry.setCname(custName);
this.customer_name = false;
}
else if(localName.equals("project-id")){
this.project_id = false;
}
else if(localName.equals("project-name")){
this.entry.setpName(projName);
this.project_name = false;
}
else if(localName.equals("service-id")){
this.service_id = false;
}
else if(localName.equals("service-name")){
this.entry.setsName(servName);
this.service_name = false;
}
else if(localName.equals("created-at")){
this.createdAt = false;
}
else if(localName.equals("note")){
this.entry.setNote(noted);
this.note = false;
}
else if(localName.equals("tracking")){
this.tracking = false;
}
}
@Override
public void characters(char ch[], int start, int length) {
if(this.id){
this.entry.setId(Integer.parseInt(new String(ch, start, length)));
}
else if(this.dateAt){
this.entry.setDateAt(new String(ch, start, length));
}
else if(this.billable){
this.entry.setBillable(Boolean.parseBoolean(new String(ch, start, length)));
}
else if(this.locked){
this.entry.setLocked(Boolean.parseBoolean(new String(ch, start, length)));
}
else if(this.createdAt){
this.entry.setCreatedAt(new String(ch, start, length));
}
else if(this.project_id){
if(length > 0){
this.entry.setPid(Integer.parseInt(new String(ch, start, length)));
}
}
else if(this.project_name){
if(length > 0){
this.projName += new String(ch, start, length);
}
}
else if(this.note){
this.noted = new String(ch, start, length);
}
else if(this.customer_id){
if(length > 0){
this.entry.setCid(Integer.parseInt(new String(ch,start, length)));
}
}
else if(this.customer_name){
if(length > 0){
this.custName = new String(ch, start, length);
}
}
else if(this.service_id){
if(length > 0){
this.entry.setSid(Integer.parseInt(new String(ch, start, length)));
}
}
else if(this.service_name){
if(length > 0){
this.servName = new String(ch, start, length);
}
}
else if(this.minutes || this.trackingMinutes){
this.entry.setMinutes(Integer.parseInt(new String(ch, start, length)));
}
}
} |
| | |
| | #2 (permalink) |
| Android Experte Modell: HTC Hero Registriert seit: 14.10.2009
Beiträge: 612
Abgegebene Danke: 18
Erhielt 42 Danke für 40 Beiträge
|
Damit es so funktioniert, wie du es dir gedacht hast, must due deine booleans alle auf false setzen, wenn du einen neuen element anfängst (im startElement()). Eine einfachere und performantere Alternative wäre ein Enum, und anscließend switch
__________________ _____________________________________________ Meine apps: http://www.pribluda.de/android Suche Schriftmuster von Prepaid-Auflade-Bons |
| | |
| | #3 (permalink) |
| Erfahrener Benutzer Modell: G1 DevPhone / SGS2 / SGT10.1v Registriert seit: 20.01.2009
Beiträge: 238
Abgegebene Danke: 7
Erhielt 50 Danke für 47 Beiträge
|
Fürs XML Parsen bietet sich ja die neue Java7 switch(String) Anweisung fast an |
| | |
![]() |
|
| Themen-Optionen | |
| Ansicht | |
| |
| ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Lesen von richtig großen XML Dateien | jskeletti | Android App Entwicklung | 7 | 20.05.2011 13:44 |
| Probleme mit Datei lesen/schreiben | JoEW | Android App Entwicklung | 1 | 29.01.2011 16:25 |
| Probleme beim einlesen von einer XML Datei | Raidri | Android App Entwicklung | 4 | 20.05.2010 01:00 |
| Probleme beim einlesen von einer XML Datei | Raidri | Android App Entwicklung | 0 | 27.03.2010 00:32 |
| Probleme beim Lesen aus Socket | Schause | Android App Entwicklung | 6 | 13.09.2009 22:21 |