# Suche in XML-Datei



## chriss_2oo4 (2. Jun 2008)

Hi,

Ich habe in einer XML-Datei Antworten auf bestimmte Aussagen/Fragen gespeichert. Allerdings kann eine Frage auch Jokerzeichen (*) enthalten. 

Folgendes Beispiel soll mein Problem demonstrieren.


```
<category>
  <q>Also *</q>
  <a>Ein Satz der mit also beginnt...</a>
</category>

<category>
  <q>Also</q>
  <a>Wie, also?</a>
</category>

<category>
  <q>Also los *</q>
  <a>Nicht so eilig!</a>
</category>
```


Wenn ich jetzt eine Antwort auf die Aussage "Also los jetzt" suche, dann passt die ja schon auf den oberen Eintrag "Also *", obwohl der letze Eintrag der richtige gewesen wäre.


Wie kann ich das Problem am besten und "performantesten" lösen?


Lg Chriss


----------



## Niki (2. Jun 2008)

Meiner Meinung nach müsstest du eine Methode schreiben die die gesamte Liste der Elemente bekommt und das Suchkriterium. Diese Methode muss anhand irgend welcher Regeln entscheiden welches Element das treffendste ist. Du solltest die Liste vorher sortieren damit du dir dann leichter tust.


----------



## chriss_2oo4 (2. Jun 2008)

Hi,

danke für Deine Antwort!

Hab ich schon versucht die Liste zu sortieren, habs leider nicht hinbekommen.

Ich hole mir eine Liste mit allen "category"-Elementen und sortiere diese anhand ihrerer "template"-Kinder.

Leider hab ich das nicht hinbekommen:


```
class TemplateComparator implements Comparator 
{
	public int compare(Object o1,Object o2) 
	{
		Element t1 = ((Element)o1).getChild("q");
		Element t2 = ((Element)o2).getChild("q");
		
		String s1 = t1.getText();
	        String s2 = t2.getText();
	    
	        int result = s1.compareTo(s2);
	    
	    return result;
     }
}
```

Funktioniert leider nicht


lg Chriss


----------



## Niki (2. Jun 2008)

Was genau funktioniert denn nicht? Kommt eine Fehlermeldung oder wird es nicht so sortiert wie du es erwartest?


----------



## chriss_2oo4 (2. Jun 2008)

Folgende Fehlermeldung erscheint



> org.jdom.IllegalAddException: The Content already has an existing parent "aiml"
> at org.jdom.ContentList.add(ContentList.java:209)
> at org.jdom.ContentList.add(ContentList.java:131)
> at org.jdom.ContentList.set(ContentList.java:488)
> ...



"aiml" ist das root-Element


Lg Chriss


----------



## Niki (2. Jun 2008)

Versuch einmal die Liste der Elemente in eine neue List (z.B. ArrayList) zu kopieren und diese neue Liste zu sortieren. Anscheinend kann man den ListenTyp den du versuchst zu sortieren nicht mehr ändern bzw. können die Elemente nicht anders angeordnet werden da diese bereits einen Parent haben


----------



## chriss_2oo4 (2. Jun 2008)

Vielen Dank Niki!

Super Tipp, hat einwandfrei geklappt!

Lg Chriss


----------

