![]() |
| | Themen-Optionen |
| | Nach oben #1 |
| Erfahrener Benutzer Registriert seit: 16.11.2005
Beiträge: 242
|
ist mir ja schon fast peinlich so eine frage zu stellen. Aber ich glaube ich brauche jetzt mal kurz einen Denkanstoss! ich möchte eine XML Datei Parsen uns zwar sieht die xml Datei wie folgt aus: Code: <?xml version="1.0" encoding="UTF-8"?> <!-- Document : module.xml Created on : 13. Juli 2005, 07:33 Author : nove Description: Purpose of the document follows. --> <elements> <modul> <modulname>Modul1</modulname> <button> <title>Beschriftung Button</title> <class>Class to call</class> <image>imagefilename</image> </button> <button> <title>Beschriftung Button</title> <class>Class to call</class> <image>imagefilename</image> </button> <button> <title>Beschriftung Button</title> <class>Class to call</class> <image>imagefilename</image> </button> <button> <title>Beschriftung Button</title> <class>Class to call</class> <image>imagefilename</image> </button> <button> <title>Beschriftung Button</title> <class>Class to call</class> <image>imagefilename</image> </button> </modul> <modul> <modulname>Modul2</modulname> <button> <title>Beschriftung Button</title> <class>Class to call</class> <image>imagefilename</image> </button> <button> <title>Beschriftung Button</title> <class>Class to call</class> <image>imagefilename</image> </button> </modul> </elements> Wie baue ich einen XML Parser der mir die Möglichkeit gibt auf die Inhalte der Elemente zuzugreifen (ich weiss, gehört zum Grundwissen über Java und XML) aber ich habe im Moment extremen Zeitmangel und sollte hier schnell zu einer Lösung kommen. [edit] noch ein Nachtrag: ich möchte dann die Daten in eine Hashmap einlesen also für die keys z.B. modulname,titel, classtocall,imagefilename und als value der hashmap eben die Values der XML Elemente diese HashMaps möchte ich dann in einen Vector ablegen zur späteren Verwendung [edit ende] |
| | |
| | Nach oben #2 |
| Projektleiter Registriert seit: 30.11.2005 Ort: Bottrop
Beiträge: 1.110
|
Sorry, aber so ganz verstanden habe ich dich wohl nicht... Du könntest einen einfachen SAX Handler schreiben, oder dir nen DOM Tree basteln lassen, denn du dann abarbeitest. Sollte beides sehr einfach sein. Wo genau ist das Problem?
__________________ Patrick Gotthardts Weblog. |
| | |
| | Nach oben #3 | |
| Erfahrener Benutzer Registriert seit: 16.11.2005
Beiträge: 242
| Zitat:
| |
| | |
| | Nach oben #4 |
| Projektleiter Registriert seit: 30.11.2005 Ort: Bottrop
Beiträge: 1.110
|
Ungetestet und in ein paar Minuten zusammengewürfelt: Code: /*
* Copyright 2005 Patrick Gotthardt
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.pagosoft.demo;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
/**
*
* @author Patrick Gotthardt
*/
public class ToolbarCreator extends DefaultHandler {
private List moduleList;
public ToolbarCreator() {
moduleList = new ArrayList();
}
public void parse(InputStream stream) {
try {
SAXParserFactory.newInstance().newSAXParser().parse(stream, this);
stream.close();
} catch(Exception e) {
e.printStackTrace();
}
}
// Real XML parsing stuff
// helpers
private StringBuffer content = new StringBuffer();
private String currentProperty;
private Modul currentModule;
private Map currentButton;
public void characters(char ch[], int start, int length) throws SAXException {
content.append(ch, start, length);
}
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
// module-Tag means: Start a new collection of buttons
if("modul".equals(qName)) {
currentModule = new Modul();
// button-Tag means: Start a new collection of button-items
} else if("button".equals(qName)) {
currentButton = new HashMap();
// add a property to something
} else {
currentProperty = qName;
}
}
public void endElement(String uri, String localName, String qName) throws SAXException {
// module-Tag means: Finished the module
if("modul".equals(qName)) {
moduleList.add(currentModule);
currentModule = null;
// button-Tag means: Start a new collection of button-items
} else if("button".equals(qName)) {
currentModule.buttonList.add(currentButton);
currentButton = null;
// add a property to the module
} else if(currentButton == null) {
currentModule.properties.put(currentProperty, content.toString());
} else {
currentButton.put(currentProperty, content.toString());
}
// end of an element always means: restore the buffer
content.delete(0, content.length());
}
// this class is needed to store the buttons as well as the properties of the module
private class Modul {
// I'm just lazy - don't do this in real!
public List buttonList;
public Map properties;
public Modul() {
buttonList = new ArrayList();
properties = new HashMap();
}
}
}
__________________ Patrick Gotthardts Weblog. |
| | |
| | Nach oben #5 |
| Erfahrener Benutzer Registriert seit: 16.11.2005
Beiträge: 242
|
ich glaube ich bin irgenwie vom Pferd gefallen und habe mir böse den Kopf gestossen aber mein "ichverstehe" Blickfeld ist gerade zero zero. :confused: Nur nochmal für dein Verständniss was ich wissen sollte oder besser gesagt wie ich mir es vorstelle. Was ich am ende raushaben möchte ist folgendes HashMap: key modulname value HashMap key value title Beschriftung Button class Class to Call image ImageFileName key modulname value HashMap key value title Beschriftung Button class Class to Call image ImageFileName key modulname value HashMap key value title Beschriftung Button class Class to Call image ImageFileName und dieses dann schön in einen Vector verpackt zurück an den Absender. Das heiss im Klartext für jeden Button möchte ich eine HashMap erzeugen die als key eben den Modulnamen trägt und als value wiederum eine HashMap die die Eigenschaften des Buttons enthält. Und das ganze möchte ich in einem Vector zurückgeben. So stell ich mir das vor. Frag nicht warum, ich hab da was spezielles mit einer GUI vor nur steht gerade ein Elefant bei mir auf dem Schlauch. Sorry ich bin halt so ein "zeigmirwiesgehtdannversteheichesauch" Typ. |
| | |
| | Nach oben #6 |
| Projektleiter Registriert seit: 30.11.2005 Ort: Bottrop
Beiträge: 1.110
|
Das Problem ist aber, dass ein Modul mehrere Buttons haben kann, deswegen habe ich da die "Modul"-Klasse hinzugefügt. Der Rest ist genauso, wie von dir gewünscht. Du bekommst eine Liste mit Modulen, die eine Liste von Maps enthält. Wenn's dir nur um den Vector geht: Es reicht, wenn du ArrayList und Vector vertauscht.
__________________ Patrick Gotthardts Weblog. |
| | |
| | Nach oben #8 |
| Projektleiter Registriert seit: 30.11.2005 Ort: Bottrop
Beiträge: 1.110
|
Ein bisschen Eigeninitiative bitte... Suche: Code: // add a property to the module
} else if(currentButton == null) {
currentModule.properties.put(currentProperty, content.toString());
} else {
currentButton.put(currentProperty, content.toString());
}
Code: // add a property to the module
} else if(currentButton == null && currentModule != null) {
currentModule.properties.put(currentProperty, content.toString());
} else if(currentButton != null) {
currentButton.put(currentProperty, content.toString());
}
__________________ Patrick Gotthardts Weblog. |
| | |
| | Nach oben #9 |
| Erfahrener Benutzer Registriert seit: 16.11.2005
Beiträge: 242
|
Sorry aber ich hab mir voher erst den Code genauer Anschauen können. Ich spiel gerade im Moment Feuerwehr (seit 3 Wochen) Gewitter und so. Ich bin zurzeit mehr damit beschäftigt neue Firewalls und Server auszuliefern. und meine Progis haben z.Zt. Urlaub deswegen stehe ich auch ein wenig auf dem Schaalauch.
|
| | |
| | Nach oben #10 |
| Projektleiter Registriert seit: 30.11.2005 Ort: Bottrop
Beiträge: 1.110
|
Wenn du nen freiberuflichen Programmierer brauchst, weißt du ja, wie du mich erreichen kannst. Sag bescheit, ob es mit den Änderungen funktioniert.
__________________ Patrick Gotthardts Weblog. |
| | |
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| DB Backup als XML im ZIP Archiv | ex³ | PHP-Programmierung | 4 | 13.09.2007 14:17 |
| Bug im PEAR XML Parser? | ex³ | PEAR, PECL und Frameworks | 11 | 15.02.2007 14:51 |
| XML aus Datenbank lesen, verarbeiten | Robinson | HTML, XML und CSS | 5 | 27.12.2005 20:30 |
| XML Schema GUI Engine (JAXFront) | spor | Nachrichten | 2 | 05.08.2004 17:27 |