3Danke
ERLEDIGT
JA
JA
ANTWORTEN
11
11
ZUGRIFFE
753
753
EMPFEHLEN
-
Hallo!
Ich wollte eine JComboBox mit Daten aus einer XML-Datei befüllen.
Leider werden alle Einträge aus der xml-Datei zusammenhängend als Eintrag in der ComboBox ausgegeben.
XML-Datei:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
<?xml version="1.0" encoding="UTF-8"?> <konfigurationen> <!--Adresse des Servers, ueber den Mail versendet werden soll--> <mailserver>mailserver.blabla.de</mailserver> <!--Festlegung aller moeglichen Absenderadressen--> <absender> <mail>Person1@blabla.de</mail> <mail>Person2@blabla.de</mail> </absender> <!--Festlegung aller Empfaengeradressen--> <empfaenger> <mail>Person1@blabla.de</mail> <mail>Person2@blabla.de</mail> </empfaenger> <!--Festlegung, ab manuell zusaetzliche Empfaenger eingetragen werden koennen--> <editierbar>nein</editierbar> </konfigurationen>
Klasse, die Methode enthält, welche Absender aus XML ausliest
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
package adresses; import java.io.File; import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.w3c.dom.Document; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; import application.Application; /** * Diese Klasse bietet alle Methoden, um die Konfigurationsdatei der * moeglichen Absender auszulesen * @author Stepanski * */ public class Sender { /** * Diese Methode liest Schlüssel der Datei aus * und schreibt diese dann in ein String[] * @return String[] senderArray */ public static String[ ] getSender() { //String[] anlegen String [ ] senderArray = null; NodeList tableNameNodeList; String tableName; // Daten aus config.xml auslesen try{ DocumentBuilderFactory factory = DocumentBuilderFactory. newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse(new File(Application.path+ "config.xml")); //NodeList = Liste, in der Eintraege gesammelt werden, ohne //Implementierung festzulegen tableNameNodeList = document.getElementsByTagName("absender"); tableName = null; if (tableNameNodeList.getLength() > 0){ senderArray = new String[tableNameNodeList.getLength()]; for (int i=0; i<tableNameNodeList.getLength(); i++){ tableName = tableNameNodeList.item(i). getTextContent().toString(); senderArray[i] = tableName; System.out.println(tableName); } } }catch (IOException e){ System.out.println("IO Fehler"); }catch (ParserConfigurationException e){ System.out.println("Parser Fehler"); }catch (SAXException e){ System.out.println("SAX Fehler"); } return senderArray; } }
Klasse, die Methode getSender() benutzt:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181
package login; import java.awt.BorderLayout; import java.awt.Container; import java.awt.Dimension; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.util.Arrays; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import adresses.Sender; import client.Client; /** * Diese Methode erzeugt ein LogIn-Fenster. * Bei Eingabe eines registrierten Nutzers mit dazugehörigem Passwort * wird das Hauptprogramm geöffnet. * @author Stepanski * */ public class LogIn extends JFrame{ private static final long serialVersionUID = 1L; /*Attribute*/ Container container; JPanel p; JLabel user; static JComboBox cb1; JButton login; /*Konstruktor*/ /** * Diese Methode enthält einen Konstruktor, welcher ein * LogIn-Fenster erzeugt. */ public LogIn(){ super(); this.createLogIn(); this.setName("LogIn"); this.setSize(400, 200); Dimension d = Toolkit.getDefaultToolkit().getScreenSize(); int x = (d.width - getSize().width) / 2; int y = (d.height - getSize().height) / 2 ; setLocation(x, y); this.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); this.setVisible(true); this.setResizable(false); this.pack(); } /** * Diese Methode legt das Aussehen des * Panels auf dem LogIn-Fenster fest. */ private void createLogIn() { Container cp = this.getContentPane(); p = new JPanel(); // GridBagLayout, um individuelles Aussehen zu ermöglichen GridBagLayout gbl = new GridBagLayout(); p.setLayout(gbl); GridBagConstraints c = new GridBagConstraints(); c.gridx = 0; c.gridy = 0; c.gridheight = 1; c.gridwidth = 1; c.insets = new Insets(10,10,10,10); user = new JLabel("Benutzername: "); p.add(user, c); //////////////////////////////////////////////////////////// [COLOR="Red"] // ComboBox mit Adressen aufrufen cb1 =new JComboBox(); c.gridx=1; c.gridwidth=2; p.add(cb1, c); fillSenderCombo();[/COLOR] // KeyListener ermoeglicht Bestaetigung des Passwortes mit // der Taste "ENTER" cb1.addKeyListener(new KeyListener () { @Override public void keyPressed(KeyEvent e) { int key = e.getKeyCode(); if ( key == KeyEvent.VK_ENTER){ // Liste aller angelegten Nutzer String nutzer = (String) cb1.getSelectedItem(); System.out.println(nutzer); // neues Hauptfenster oeffnen Client client = new Client(); client.setAbsender(nutzer); // LogIn-Fenster "unsichtbar" machen LogIn.this.setVisible(false); // gibt Speicher wieder frei dispose(); }else JOptionPane.showMessageDialog(null, "Anmeldung fehlgeschlagen", "Error Message", JOptionPane.ERROR_MESSAGE); } @Override public void keyReleased(KeyEvent arg0) { } @Override public void keyTyped(KeyEvent arg0) { } }); login = new JButton("ENTER"); c.gridx = 3; c.gridy = 2; c.insets = new Insets(20,10,10,0); p.add(login, c); // gleiche Aktion wie bei KeyListener, nur das diesmal auf // druecken des Buttons reagiert wird login.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent evt) { String nutzer = (String) cb1.getSelectedItem(); System.out.println("Nutzer: "+nutzer); LogIn.this.setVisible(false); // gibt Speicher wieder frei dispose(); Client client = new Client(); client.setAbsender(nutzer); } }); cp.add(p, BorderLayout.CENTER); } [COLOR="Red"] /** * Diese Methode fuellt die JComboBox, welche im Auswahl-Dialog * eingebettet wird */ public static void fillSenderCombo(){ String [] adressen = Sender.getSender(); Arrays.sort(adressen); for (String i:adressen) { System.out.println(i); cb1.addItem(i); }[/COLOR] } }
Ausgabe in JComboBox:
Ein Feld mit "Person1@blabla.orgPerson2@blabla.org"
Was habe ich falsch gemacht?
Wie bekomme ich es hin, dass beide Einträge einzeln in JComboBox aufgeführt werden?
-
21.04.10 08:38 #2
- Registriert seit
- Sep 2008
- Beiträge
- 78
Hallo,
xml ist noch nicht so meine Stärke, aber ich glaube, das Problem liegt in der Methode getSender().
Das Sysout nach
müßte eigendlich hier schon "Person1@blabla.orgPerson2@blabla.org" ausgeben, oder?Code :1 2
senderArray[i] = tableName; System.out.println(tableName);
MfG
hansmueller
-
Also in der Console wird folgende Ausgabe sichtbar:
Person1@blabla.org
Person2@blabla.org
Also, beide Einträge werden angezeigt, aber mit Zeilenumbruch. Bin deshalb davon ausgegangen, dass die Daten also auch "getrennt" in der JComboBox angezeigt werden.Geändert von Tinipieps (21.04.10 um 09:25 Uhr)
-
Ah, mir ist soeben aufgefallen, das das sysout in der Methode getSender() 2x den soeben geposteten Beitrag liefert.
Also, scheint hier der Fehler zu liegen:
Er durchläuft zwar zweimal die Schleife, weil ja 2 Einträge in der xml-Datei vorhanden sind, aber scheinbar liefert er mir 2x den zusammengesetzten String.
KOMISCH
Liegt das nun an der Art, wie ich die xml-Datei auslese (ist für mich Neuland) oder ein meiner Methode? Kann den Fehler einfach nicht finden!
-
21.04.10 11:30 #5
Ich hab deine XML-Datei mal mit JDom verarbeitet und bin zu folgendem Ergebnis gekommen:
Absender.java
Empfaenger.javaCode java:
Konfiguration.javaCode java:
Parser.javaCode java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
package de.tutorials.tinipieps.sender; import java.util.LinkedList; import java.util.List; public class Konfiguration { private String mailServer; private List<Absender> absender; private List<Empfaenger> empfaenger; private boolean editierbar; public Konfiguration() { absender = new LinkedList<Absender>(); empfaenger = new LinkedList<Empfaenger>(); } public List<Absender> getAbsender() { return absender; } public List<Empfaenger> getEmpfaenger() { return empfaenger; } public void setMailServer(String mailServer) { this.mailServer = mailServer; } public String getMailServer() { return mailServer; } public void setEditierbar(boolean editierbar) { this.editierbar = editierbar; } public boolean isEditierbar() { return editierbar; } }
Und zum Schluss noch die Anwendung des ganzen ...Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
package de.tutorials.tinipieps.sender; import java.io.File; import java.io.IOException; import org.jdom.Element; import org.jdom.JDOMException; import org.jdom.input.SAXBuilder; public class Parser { private Element root; public Element getRootElement() { return root; } public Parser(String xmlPath) throws JDOMException, IOException { root = new SAXBuilder().build(new File(xmlPath)).getRootElement(); } public Konfiguration parseKonfiguration() { Konfiguration konfiguration = new Konfiguration(); Element el = null; if((el = root.getChild("mailserver")) != null) { konfiguration.setMailServer(el.getTextTrim()); } // Absender if((el = root.getChild("absender")) != null) { for(Object o : el.getChildren("mail")) { Element element = (Element)o; Absender tmp = new Absender(); tmp.setMail(element.getTextTrim()); konfiguration.getAbsender().add(tmp); } } // Empfänger if((el = root.getChild("empfaenger")) != null) { for(Object o : el.getChildren("mail")) { Element element = (Element)o; Empfaenger tmp = new Empfaenger(); tmp.setMail(element.getTextTrim()); konfiguration.getEmpfaenger().add(tmp); } } return konfiguration; } }
Main.java
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
package de.tutorials.tinipieps.sender; import java.io.IOException; import org.jdom.JDOMException; public class Main { public static void main(String[] args) throws JDOMException, IOException { Konfiguration conf = new Parser("res/sender.xml").parseKonfiguration(); System.out.println("Mailserver:"); System.out.println(conf.getMailServer()); System.out.println(); System.out.println("Absender:"); for(Absender a : conf.getAbsender()) { System.out.println(a.getMail()); } System.out.println(); System.out.println("Empfänger:"); for(Empfaenger e : conf.getEmpfaenger()) { System.out.println(e.getMail()); } } }
Mit einer JComboBox hab ich es noch nicht probiert, mach ich mal eben, aber ich denke das sollte so klappen ...
EDIT:
So, hab mal eine Testgui gemacht und es klappt super mit der JComboBox ...Geändert von Akeshihiro (21.04.10 um 11:43 Uhr)
Man sagt, das Schwert eines Samurai sei seine Seele ...
Mit den Beiträgen ist es wie mit Schwertern: Je besser die Rohstoffe sind und je öfter man diese bearbeitet, desto hochwertiger sind sie.
Das Schmieden ist eine Kunst; Das Schreiben auch ;)
-
21.04.10 11:37 #6
- Registriert seit
- Sep 2008
- Beiträge
- 78
Ich glaube, ich habe es gelöst.

Man muß sich sozusagen von Node zu ChildNode angeln.
Hier ein exemlarischer Quellcode:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
import java.io.File; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.w3c.dom.NodeList; public class MainProg { public static void main (String[] args) { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder; try { builder = factory.newDocumentBuilder(); Document document = builder.parse(new File("Pfad zu deiner config-Datei")); NodeList nlnr = document.getElementsByTagName("absender"); System.out.println("Anzahl der Nodes in nlnr: " + nlnr.getLength()); System.out.println("Die Node auf Index 0: " + nlnr.item(0)); Node m = nlnr.item(0); System.out.println("Name von Node m: " + m.getNodeName()); System.out.println("Hat m Kinder:" + m.hasChildNodes()); NodeList nl = m.getChildNodes(); System.out.println("------------------------------------"); for(int i = 0; i < nl.getLength(); i++) { System.out.println("in der Schleife"); if(nl.item(i).getNodeName().equals("mail")) { System.out.println("Treffer"); System.out.println(nl.item(i).getNodeName()); System.out.println(nl.item(i).getTextContent()); System.out.println("XXXXXXXXXXXXXXXXXXXXXXXX"); } else { System.out.println("Kein Treffer"); System.out.println(nl.item(i).getNodeName()); System.out.println(nl.item(i).getTextContent()); System.out.println("XXXXXXXXXXXXXXXXXXXXXXXX"); } } } catch(Exception e) { e.printStackTrace(); } } }
Diesen Code funktioniert und du dürftest das schnell in deinen Code integrieren können.
Das einzige was ich nicht verstehe ist, was die Nodeliste alles als Node zählt?
MfG
hansmueller
-
Das ist eigentlich ganz einfach, jedes Tag ist ein Node. Dein Tag <Konfigurationen> ist ein Node, das die Tags <mailserver>, <absender>, <empfaenger> und <editierbar> als childnodes hat, welche alle in einer Liste aufgzählt werden, sobald du getChildNodes für den <Konfigurationen>-Node aufrufst. Absender hat wiederum die <mail>-Tags als childnode, die aber nicht als childnode des <Konfigurationen>-Tags gezählt werden; du musst dir das Ganze als eine Art Baumstruktur vorstellen, bei der alle direkten Unterknoten eines Knotens in einer Liste aufgezählt werden.
Person1@blabla.de ist übrigens ein Node vom Typ TEXT_NODE.Vielen Dank für die Nutzung des Bewerten- und Danke-Buttons
Wenn man sieht, dass man einen anderen glücklich gemacht hat, ist die Welt um zwei glückliche Menschen reicher.
-
Danke erstmal für den Tipp. Eigentlich ja logisch, weil ich vor jedem absender ja noch <mail> stehen habe.
Also, ich hab jetzt mal versucht, deinen Ansatz bei mir einzubauen:
Problem: list.item(i) liefert 5 verschiedene eiträge, wobei nur 2 relevant sind (.equals("mail")).
Da ich aber zuvor die Größe meines Arrays festlege, sind nun 3 Werte des Arrays nicht belegt.
Ich weiß nicht, ob es daran liegt, aber ich kriege jetzt ne NullPointerException in der Klasse LogIn -> Methode: fillSenderCombo() -> Stelle: Arrays.sort(adressen);
Und nun?
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
if (childrenNodeList.getLength() > 0){ // Feststellung, das Node "absender" Kinder hat ("mail") Node element = childrenNodeList.item(0); System.out.println("Node: " + element.getNodeName()+ " hat Kinder:" + element.hasChildNodes()); // NodeList der Kinder NodeList list = element.getChildNodes(); System.out.println("-----------------------------------"); int laenge = list.getLength(); System.out.println("Laenge des Arrays: "+laenge); senderArray = new String[laenge]; System.out.println("-----------------------------------"); for (int i=0; i<laenge; i++){ if (list.item(i).getNodeName().equals("mail")){ System.out.println(list.item(i).getNodeName()); System.out.println(list.item(i).getTextContent()); valueName = list.item(i).getTextContent(); senderArray[i] = valueName; System.out.println( "Nutzer in Liste der Absender uebernommen"); System.out.println("XXXXXXXXXXXXXXXXXXXXXXXX"); } else{ System.out.println( "Fehler beim Hinzufuegen der Absender"); System.out.println(list.item(i).getNodeName()); System.out.println(list.item(i).getTextContent()); System.out.println("XXXXXXXXXXXXXXXXXXXXXXXX"); } } } }catch (IOException e){ System.out.println("IO Fehler"); }catch (ParserConfigurationException e){ System.out.println("Parser Fehler"); }catch (SAXException e){ System.out.println("SAX Fehler"); } return senderArray;
Ausgabe auf Konsole:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
Anzahl der Nodes in 'absender': 1, wobei die Node auf Index 0: [absender: null] Node: absender hat Kinder:true ----------------------------------- Laenge des Arrays: 5 ----------------------------------- Fehler beim Hinzufuegen der Absender #text XXXXXXXXXXXXXXXXXXXXXXXX mail Person1@blabla.org Nutzer in Liste der Absender uebernommen XXXXXXXXXXXXXXXXXXXXXXXX Fehler beim Hinzufuegen der Absender #text XXXXXXXXXXXXXXXXXXXXXXXX mail Person2@blabla.org Nutzer in Liste der Absender uebernommen XXXXXXXXXXXXXXXXXXXXXXXX Fehler beim Hinzufuegen der Absender #text XXXXXXXXXXXXXXXXXXXXXXXX Exception in thread "main" java.lang.NullPointerException at java.util.Arrays.mergeSort(Unknown Source) at java.util.Arrays.sort(Unknown Source) at login.LogIn.fillSenderCombo(LogIn.java:175) at login.LogIn.createLogIn(LogIn.java:99) at login.LogIn.<init>(LogIn.java:54) at application.Application.main(Application.java:15)
-
Ich empfehle dir, die eingelesenen Daten in einer LinkedList<String> zu speichern (findest du in java.utils, wie jede andere Collection auch), dann brauchst du nämlich keine Größenangeben zu machen. Wenn du mit dem Einlesen fertig bist, rufst du dann die toArray()-Methode auf.
Warum er 5 Nodes statt 2 einliest, weiß ich nicht, womöglich sind das irgendwelche Verwaltungs-Nodes. Wenn es dich interessiert, musst du das noch genauer untersuchen. Wäre schön, wenn du dann deine Erkenntnisse hier veröffentlichst, ich bin nämlich auch auf den Grund gespannt.Vielen Dank für die Nutzung des Bewerten- und Danke-Buttons
Wenn man sieht, dass man einen anderen glücklich gemacht hat, ist die Welt um zwei glückliche Menschen reicher.
-
Auf eine ähnliche Idee bin ich grad selbst gekommen:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
package adresses; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; import application.Application; /** * Diese Klasse bietet alle Methoden, um die Konfigurationsdatei der * moeglichen Absender auszulesen * @author Stepanski * */ public class Sender { /** * Diese Methode liest Schlüssel der Datei aus * und schreibt diese dann in ein String[] * @return String[] senderArray */ public static String[ ] getSender() { //String[] anlegen String [ ] senderArray = null; //Liste anlegen, der Werte zunaechst uebergeben werden List<String> senderList = new ArrayList<String>(); NodeList childrenNodeList; String valueName; // Daten aus config.xml auslesen try{ DocumentBuilderFactory factory = DocumentBuilderFactory. newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse(new File(Application.path+ "config.xml")); //NodeList = Liste, in der Eintraege gesammelt werden, ohne //Implementierung festzulegen // getElementsByTagName() gibt NodeList mit allen Elementen // des gegebenen Tag-Namens zurück // -> "mail" childrenNodeList = document.getElementsByTagName("absender"); System.out.println("Anzahl der Nodes in 'absender': " + childrenNodeList.getLength()+ ", wobei die Node auf Index 0: " + childrenNodeList.item(0)); valueName = null; if (childrenNodeList.getLength() > 0){ // Feststellung, das Node "absender" Kinder hat ("mail") Node element = childrenNodeList.item(0); System.out.println("Node: " + element.getNodeName()+ " hat Kinder:" + element.hasChildNodes()); // NodeList der Kinder erstellen NodeList list = element.getChildNodes(); System.out.println("-----------------------------------"); int laenge = list.getLength(); // for-Schleife ueber alle Elemente der NodeList list for (int i=0; i<laenge; i++){ Node childrenElement = list.item(i); System.out.println("Node: " + childrenElement.getNodeName()+" hat Kinder:" + childrenElement.hasChildNodes()); System.out.println("******************************"); // wenn Name des NodeList-Eintrages gleich "mail" if (list.item(i).getNodeName().equals("mail")){ // Name der Node System.out.println(list.item(i).getNodeName()); // Name des Node-Eintrages System.out.println(list.item(i).getTextContent()); //Name String uebergeben valueName = list.item(i).getTextContent(); // String an List<String> uebergeben senderList.add(valueName); System.out.println( "Nutzer in Liste der Absender uebernommen"); System.out.println("XXXXXXXXXXXXXXXXXXXXXXXX"); } else System.out.println( "Fehler beim Hinzufuegen der Absender"); } } }catch (IOException e){ System.out.println("IO Fehler"); }catch (ParserConfigurationException e){ System.out.println("Parser Fehler"); }catch (SAXException e){ System.out.println("SAX Fehler"); } // List an Array uebergeben senderArray = (String[])senderList.toArray( new String[senderList.size()]); return senderArray; } }
Falls ich den Grund für die "zuvielen" Nodes finde, werde ich euch natürlich in Kenntnis setzten.
Find es ja komisch, dass alle 3 Nodes "#text" heißen und keine Kinder haben!
Sollte jemand schon die Antwort kennen: Ich bin für jeden Hinweis dankbar!
-
21.04.10 13:54 #11
Gut, dass ich JDOM verwende xD Damit hatte ich noch solche Probleme
Allerdings muss man dann eine externe Bibliothek mitschleppen ...
Man sagt, das Schwert eines Samurai sei seine Seele ...
Mit den Beiträgen ist es wie mit Schwertern: Je besser die Rohstoffe sind und je öfter man diese bearbeitet, desto hochwertiger sind sie.
Das Schmieden ist eine Kunst; Das Schreiben auch ;)
-
21.04.10 15:20 #12
- Registriert seit
- Sep 2008
- Beiträge
- 78
Ich habe es herausgefunden.Falls ich den Grund für die "zuvielen" Nodes finde, werde ich euch natürlich in Kenntnis setzten.
Find es ja komisch, dass alle 3 Nodes "#text" heißen und keine Kinder haben!
Sollte jemand schon die Antwort kennen: Ich bin für jeden Hinweis dankbar!
Es sind die Zeilenumbrüche und Tabulatoren bzw. Leerzeichen zwischen den Tags in deiner config-Datei.
Wenn du die config-Datei so aussehen läßt:
bekommst du nur noch zwei Childnodes für den Node "empfaenger". Nämlich die zwei "mail"-Nodes.Code :1
<?xml version="1.0" encoding="UTF-8"?><konfigurationen><mailserver>mailserver.blabla.de</mailserver><absender><mail>Person1@blabla.de</mail><mail>Person2@blabla.de</mail></absender><empfaenger><mail>Person1@blabla.de</mail><mail>Person2@blabla.de</mail></empfaenger><editierbar>nein</editierbar></konfigurationen>
Dieses Verhalten könnte damit zu tun haben, daß das Packet org.w3c.dom, welches wir verwenden primär für html-Dateien ausgelegt ist und nicht für reine xml-Dateien.
Man kann somit auch den Text zwischen den Tags abgreifen, was ja bei html teilweise nötig ist, und das waren die 3 "#text"-Nodes.
Bei xml ist sowas (glaube ich zumindest) gar nicht erlaubt, da hier ein ganz stricktes Modell vorgegeben ist.
MfG
hansmuellerGeändert von hansmueller (21.04.10 um 15:26 Uhr) Grund: Weitere Erläuterung
Ähnliche Themen
-
Befüllen einer MySQL DB mit großen Daten
Von ElJarno im Forum Algorithmen & Datenstrukturen mit JavaAntworten: 7Letzter Beitrag: 21.05.10, 10:20 -
GridView mit Daten aus DB befüllen
Von keks1984 im Forum .NET Web und KommunikationAntworten: 1Letzter Beitrag: 10.09.07, 13:23 -
DropDownList mit Daten aus MS SQL Server 2005 befüllen
Von keks1984 im Forum ASPAntworten: 0Letzter Beitrag: 08.08.07, 10:39 -
JComboBox mit Tabellenname und TabellenId befüllen, jedoch nur Tabellenname anzeigen
Von MarkusG im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 5Letzter Beitrag: 08.09.04, 17:08 -
Dropdownlisten variable mit daten befüllen...
Von Fenriswolf im Forum .NET ArchivAntworten: 0Letzter Beitrag: 10.12.03, 21:20





Zitieren
Login





