Aus XML ein Menu(swt.widgets) erstellen?

Hi,

ich möchte aus einer XML Datei ein Menu erstellten, dazu möchte ich den SAX Parser nutzen.
Die XML-Datei hat einmal die Elemente “menu”, “submenu” und “menuitem”.

Meine Idee ist jetzt die XML-Datei so zu parsen, dass für jeden “submenu” eine ArrayList erstellt wird, die alle “menuitem” beinhaltet. Und dann das Menu mit den “submenu”-ArrayLists erstellen.

Meint ihr das meine Idee so richtig ist oder geht es irgendwie eleganter?

XML-File:

<?xml version="1.0" encoding="UTF-8"?>
<!--Aufbau Contextmenu für Auswahl Werte -->
<menu xsi:noNamespaceSchemaLocation="Untitled1.xsd"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
	<menuitem tableColumn="messdaten.energie" labelName="Energie"/>
	<menuitem tableColumn="messdaten.leistung" labelName="Leistung"/>
	<separator/>
	<submenu labelName="Temperatur(Grad Celsius)">
		<menuitem tableColumn="messdaten.gent" labelName="Generator"/>
		<menuitem tableColumn="messdaten.gent2" labelName="Generator 2"/>
		<menuitem tableColumn="messdaten.lagert" labelName="Lager"/>
		<menuitem tableColumn="messdaten.lagert2" labelName="Lager 2"/>
		<menuitem tableColumn="messdaten.aussent" labelName="Aussentemperatur"/>
		<menuitem tableColumn="messdaten.getrt" labelName="Getriebe"/>
		<menuitem tableColumn="messdaten.temp_gondel" labelName="Gondel"/>
		<menuitem tableColumn="messdaten.temp_kuehlwasser" labelName="Kühlwasser"/>
		<menuitem tableColumn="messdaten.temp_generatorlager" labelName="Generatorlager"/>
		<menuitem tableColumn="messdaten.temp_spinner" labelName="Spinner"/>
		<menuitem tableColumn="messdaten.temp_hydraulik" labelName="Hydraulik"/>
		<menuitem tableColumn="messdaten.temp_schleifring" labelName="Schleifring"/>
		<menuitem tableColumn="messdaten.temp_busbarsec" labelName="Busbarsection"/>
		<menuitem tableColumn="messdaten.temp_hub_controller" labelName="Hub Controller"/>
		<menuitem tableColumn="messdaten.temp_top_steuerung" labelName="Top Steuerung"/>
		<menuitem tableColumn="messdaten.temp_trafo_phase_1" labelName="Trafo Phase 1"/>		
		<menuitem tableColumn="messdaten.temp_trafo_phase_2" labelName="Trafo Phase 2"/>
		<menuitem tableColumn="messdaten.temp_trafo_phase_3" labelName="Trafo Phase 3"/>		
		<menuitem tableColumn="messdaten.temp_geno_phase_2" labelName="Generator Phase 2"/>
		<menuitem tableColumn="messdaten.temp_geno_phase_3" labelName="Generator Phase 3"/>
		<menuitem tableColumn="messdaten.temp_geno_lager_b" labelName="Generator Lager b"/>
		<menuitem tableColumn="messdaten.temp_pitch_motor_1" labelName="Pitch Motor 1"/>
		<menuitem tableColumn="messdaten.temp_pitch_motor_2" labelName="Pitch Motor 2"/>
		<menuitem tableColumn="messdaten.temp_pitch_motor_3" labelName="Pitch Motor 3"/>
		<menuitem tableColumn="messdaten.temp_pitch_box_1" labelName="Pitch Box 1"/>
		<menuitem tableColumn="messdaten.temp_pitch_box_2" labelName="Pitch Box 2"/>
		<menuitem tableColumn="messdaten.temp_pitch_box_3" labelName="Pitch Box 3"/>
		<menuitem tableColumn="messdaten.temp_turm_unten" labelName="Turm unten"/>
		<menuitem tableColumn="messdaten.temp_turm_oben" labelName="Turm oben"/>
		<menuitem tableColumn="messdaten.temp_lager_lw_rotor" labelName="Lager lw Rotor"/>
		<menuitem tableColumn="messdaten.temp_lager_lw_gen" labelName="Lager lw Generator"/>
		<menuitem tableColumn="messdaten.temp_lager_sw_rotor" labelName="Lager sw Rotor"/>
		<menuitem tableColumn="messdaten.temp_lager_sw_gen" labelName="Lager sw Generator"/>
		<menuitem tableColumn="messdaten.temp_lager_zw" labelName="Lager zw"/>
		<menuitem tableColumn="messdaten.temp_getr_oel_kuehl" labelName="Getriebe Öl Kühlung"/>
		<menuitem tableColumn="messdaten.temp_rotor_bremse" labelName="Rotor Bremse"/>
	</submenu>
	<submenu labelName="Kilowatt(kW)">
		<menuitem tableColumn="messdaten.energie" labelName="Energie"/>
		<menuitem tableColumn="messdaten.leistung" labelName="Leistung"/>		
		<menuitem tableColumn="messdaten.gen_leistung" labelName="Generator Leistung"/>
		<menuitem tableColumn="messdaten.gen_scheinleistung" labelName="Generator Scheinleistung"/>
		<menuitem tableColumn="messdaten.gen_blindleistung" labelName="Generator Blindleistung"/>
		<menuitem tableColumn="messdaten.prod1" labelName="Produktion 1"/>
		<menuitem tableColumn="messdaten.prod2" labelName="Produktion 2"/>
		<menuitem tableColumn="messdaten.prod_ges" labelName="Produktion Gesamt"/>
		<menuitem tableColumn="messdaten.abgab" labelName="Abgabe"/>
		<menuitem tableColumn="messdaten.bezug" labelName="Bezug"/>		
	</submenu>
	<separator/>
	<submenu labelName="Windgeschwindigkeit(m/s)">
		<menuitem tableColumn="messdaten.wind_geschw" labelName="Windgeschwindigkeit"/>
		<menuitem tableColumn="messdaten.wind_geschw_az" labelName="Windgeschwindigkeit Azimut"/>
		<menuitem tableColumn="messdaten.wind_geschw_mittel" labelName="Windgeschwindigkeit Mittel"/>
		<menuitem tableColumn="messdaten.wind_geschw_aneo_1" labelName="Windgeschwindigkeit Anemometer 1"/>
		<menuitem tableColumn="messdaten.wind_geschw_aneo_2" labelName="Windgeschwindigkeit Anemometer 2"/>
	</submenu>
	<separator/>
	<submenu labelName="Windrichtung(rpm)">
		<menuitem tableColumn="messdaten.wind_richtung_gondel" labelName="Windrichtung Gondel"/>
		<menuitem tableColumn="messdaten.wind_richtung_gondel_abs" labelName="Windrichtung ABS"/>
		<menuitem tableColumn="messdaten.wind_richtung_absolut" labelName="Windrichtung Absolut"/>
		<menuitem tableColumn="messdaten.wind_richtung_relativ" labelName="Windrichtung Relativ"/>
		<menuitem tableColumn="messdaten.wind_richtung_fahne_1" labelName="Windrichtung Fahne 1"/>
		<menuitem tableColumn="messdaten.wind_richtung_fahne_2" labelName="Windrichtung Fahne 2"/>
		<menuitem tableColumn="messdaten.azimut" labelName="Azimut"/>
	</submenu>
	<separator/>
	<submenu labelName="Umdrehungen(rpm)">
		<menuitem tableColumn="messdaten.rpm_gen" labelName="Generator "/>
		<menuitem tableColumn="messdaten.rpm_rotor" labelName="Rotor"/>
	</submenu>
	<separator/>
	<submenu labelName="Anstellwinkel(Grad)">
		<menuitem tableColumn="messdaten.pitch" labelName="Pitch"/>
		<menuitem tableColumn="messdaten.pitch_2" labelName="Pitch 2"/>
		<menuitem tableColumn="messdaten.pitch_3" labelName="Pitch 3"/>
	</submenu>
	<separator/>
	<submenu labelName="Stunden">
		<menuitem tableColumn="messdaten.stunden_betrieb" labelName="Betriebsstunden"/>
		<menuitem tableColumn="messdaten.stunden_netz_ok" labelName="Netz Ok"/>
		<menuitem tableColumn="messdaten.stunden_service" labelName="Service"/>
		<menuitem tableColumn="messdaten.stunden_drehen" labelName="Drehen"/>
		<menuitem tableColumn="messdaten.stunden_spannung_an" labelName="Spannung an"/>
		<menuitem tableColumn="messdaten.stunden_umgebung_ok" labelName="Umgebung Ok"/>
		<menuitem tableColumn="messdaten.stunden_summe" labelName="Summe"/>
		<menuitem tableColumn="messdaten.stunden_total" labelName="Total"/>
		<menuitem tableColumn="messdaten.btrstd1" labelName="Betriebsstunden 1"/>
		<menuitem tableColumn="messdaten.btrstd2" labelName="Betriebsstunden 2"/>
	</submenu>
	<separator/>
	<submenu labelName="Spannung(Volt)">
		<menuitem tableColumn="messdaten.spann1" labelName="Spannung 1"/>
		<menuitem tableColumn="messdaten.spann2" labelName="Spannung 2"/>
		<menuitem tableColumn="messdaten.spann3" labelName="Spannung 3"/>
	</submenu>
	<separator/>
	<submenu labelName="Strom(Ampere)">
		<menuitem tableColumn="messdaten.strom1" labelName="Strom 1"/>
		<menuitem tableColumn="messdaten.strom2" labelName="Strom 2"/>
		<menuitem tableColumn="messdaten.strom3" labelName="Strom 3"/>
	</submenu>
	<separator/>
	<submenu labelName="Blindenergie(var)">
		<menuitem tableColumn="messdaten.zaehler_blindenergie_gen_0" labelName="Zähler Generator Blindenergie 0"/>
		<menuitem tableColumn="messdaten.zaehler_blindenergie_gen_1" labelName="Zähler Generator Blindenergie 1"/>
		<menuitem tableColumn="messdaten.zaehler_blindenergie_gen_2" labelName="Zähler Generator Blindenergie 2"/>
		<menuitem tableColumn="messdaten.zaehler_blindenergie_prod" labelName="Zähler Generator Produktion"/>
	</submenu>
	<separator/>
	<menuitem tableColumn="messdaten.cosph" labelName="Cosinus Phi"/>
	<menuitem tableColumn="messdaten.gen_frequenz" labelName="Frequenz(Hz)"/>
</menu>

Ja warum das Rad neu erfinden? Es gibt so Sachen wie Eclipse RCP…

Ok, bringt mich nicht wirklich weiter. Erzähl mir mehr, bitte. :wink:

Zur Info: Das Menu erscheint, wenn ich mit rechtsklick auf ein Eintrag in eine ListViewer klicke.

[QUOTE=Kokscola]Ok, bringt mich nicht wirklich weiter. Erzähl mir mehr, bitte. :wink:
[/QUOTE]

Was willst wissen?

Google Eclipse RCP da steht ziemlich viel :wink:

Mit Eclipse e4 hast du sogar schon ein fertiges EMF-Model, um das anzuwenden…

[QUOTE=SirWayne]Was willst wissen?

Google Eclipse RCP da steht ziemlich viel :wink:

Mit Eclipse e4 hast du sogar schon ein fertiges EMF-Model, um das anzuwenden…[/QUOTE]

Möchte aber keine Eclipse e4 Applikation erstellen. :stuck_out_tongue:

Werde es mal mit meiner Idee versuchen, aber da komme ich zu dem Problem dass ich beim erstellen des Menues sagen muss, dass manche „menuitems“ zu dem „subitem“ gehört, usw. …

[QUOTE=Kokscola]Möchte aber keine Eclipse e4 Applikation erstellen. :stuck_out_tongue:

[/QUOTE]

Weil? Da ist die Idee doch schon genau dahinter, warum willst du das komplett nochmal machen?

[QUOTE=Kokscola;27109]Werde es mal mit meiner Idee versuchen, aber da komme ich zu dem Problem dass ich beim erstellen des Menues sagen muss, dass manche „menuitems“ zu dem „subitem“ gehört, usw. …
[/QUOTE]
Dann bau dir ein gescheites Model(siehe EMF) zusammen, modelliere es richtig wie du es dir vorstellst mit Beziehungen und alles und dann kannst du sauber dein Model auslesen und drüber iterieren und deine Widgets erstellen…