# jdom, xml, login-system



## derFrank (4. Aug 2010)

Hallo zusammen,
da ich in Sachen Java eine ziemliche Niete bin hoffe ich , dass ihr mir bei meinem Problem helfen könnt. Ist denke ich auch keine große Sache, ich bekomme es aber einfach nicht hin.

Bin dabei ein einfaches Login-System zu entwerfen. Aus meiner "Main" werden dabei einfach ein Passwort & ein Benutzername jeweils über eine Text-Box eingelesen und an meine setUser Methode als String übergeben. Als Erstes erzeuge ich ein xml-File, das folgendermaßen aussieht:

[XML]
  <?xml version="1.0" encoding="UTF-8" ?> 
  <user>
    <person>
      <name>user1</name> 
      <password>pass1</password> 
      <token>testToken</token> 
    </person>
    <person>
      <name>user2</name> 
      <password>pass2</password> 
      <token>testToken</token> 
   </person>
   <person>
      <name>user3</name> 
      <password>pass3</password> 
      <token>testToken</token> 
   </person>
  </user>
[/XML]
das klappt auch alles ohne Probleme. Bei jeder neuen Anmeldung wird eine neue Person mit name/password/token angelegt.

hier noch der Java Code:


```
package anmeldung;

import java.awt.List;
import java.io.FileOutputStream;
import java.io.IOException;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.Namespace;
import org.jdom.input.SAXBuilder;
import org.jdom.output.XMLOutputter;
import org.xml.sax.InputSource;
import org.jdom.xpath.*;

public class Users{

    public void setUser(String benutzer, String passwort) throws JDOMException, IOException{

    SAXBuilder sxbuild = new SAXBuilder();
    InputSource is = new InputSource("C:/Test.xml");
    Document doc = sxbuild.build(is);
    Element root = doc.getRootElement();

    root.addContent(new Element("person").addContent(
            new Element("name").setText(benutzer)).addContent(
            new Element("password").setText(passwort)).addContent(
            new Element ("token").setText("testToken"))
            );


    XMLOutputter outputter = new XMLOutputter();
    FileOutputStream output = new FileOutputStream("C:/Test.xml");
    outputter.output(doc,output);

    }
}
```

Mein erstes Problem ist, dass ich gerne vor der Zeile 25 (vor der Erzeugung neuer "xml-Elemente") eine if-Abfrage machen möchte, ob nicht bereits ein User mit dem gleichen Namen existiert. Es müssten also alle existierenden user auf den namen abgeglichen werden (<name>user1</name> usw).

Sollte das funktionieren, hab ich im Moment auch noch überhaupt keine Vorstellung darüber, wie ich anhand des XML-Files später jedem User das dazugehörige Passwort zuordnen kann??? 

Hoffe, dass ich mich einigermaßen verständlich ausgedrückt habe...

Gruß Frank


----------



## ProgX (4. Aug 2010)

Du kannst doch einfach mit nem XML parser und einer Schleife über das XML File iterieren und die daraus erhaltenen Strings vergleichen. Wenn dann ein User gefunden wurde, checkst du einfach noch das Passwort!

So würde ich das halt machen


----------



## derFrank (4. Aug 2010)

Vielen Dank nochmal für die schnelle Antwort. Wollte nur nochmal auf meine erste Zeile verweisen:".._. da ich in Sachen Java eine ziemliche Niete bin..."_.
Also, ich habe schon ziech Sachen ausprobiert und es nicht hin bekommen. Mir fehlt an dieser Stelle komplett die Erfahrung. Beschäftige mich mit Java erst seit wenigen Wochen. Sorry....


----------



## eRaaaa (4. Aug 2010)

Deinen zweiten Satz mit dem Password zuordnen habe ich nicht ganz verstanden...
Aber möglich wäre z.B. folgendes:

```
public void setUser(String benutzer, String passwort)
			throws JDOMException, IOException {

		SAXBuilder sxbuild = new SAXBuilder();
		InputSource is = new InputSource("C:/Test.xml");
		Document doc = sxbuild.build(is);
		Element root = doc.getRootElement();
		Element e = exist(benutzer, root);
		if (e == null) {
			//neuen user eintragen
			root.addContent(new Element("person").addContent(
					new Element("name").setText(benutzer)).addContent(
					new Element("password").setText(passwort)).addContent(
					new Element("token").setText("testToken")));

			XMLOutputter outputter = new XMLOutputter();
			FileOutputStream output = new FileOutputStream("C:/Test.xml");
			outputter.output(doc, output);
		} else {
			//gebe userdaten aus oder was auch immer
			printData(e);
		}
	}

	private void printData(Element e) {
		System.out.println("Benutzer: " + e.getChildText("name"));
		System.out.println("Passwort: " + e.getChildText("password"));
		System.out.println("Token: " + e.getChildText("token"));
	}

	public Element exist(String user, Element root) {
		for (Object e : root.getChildren("person")) {
			if (((Element) e).getChildText("name").equals(user)) {
				return (Element) e;
			}
		}
		return null;
	}
```

Meintest du das so? ;/


----------



## derFrank (4. Aug 2010)

Oh man... vielen vielen Dank eRaaaa. Mir war überhaupt nicht klar wie ich auf dem xml-"Baum" hin und her wandern kann.... Ich sitze wirklich schon den ganzen Tag dran... und dann kommst du. Peinlich das ist.... Nochmals Danke. Muss mir das heut Abend nochmal ganz genau angucken. Aber es funktioniert.
Merci!


----------

