Im Moment möchte ich eine XML-Datei auslesen.
Dafür benutze ich JDOM.
Mein Problem ist, ich kann die Methode javax.servlet.getServletContext; nicht importieren (siehe Zeile 20).
diese müsste sich doch aber in der servlet-api.jar befinden.
Wie bekomme ich jetzt den Import?
hier noch mein code
Code:
import java.io.*;
import java.io.FileInputStream;
import java.util.List;
import org.apache.xerces.parsers.DOMParser;
import org.jdom.input.SAXBuilder;
import org.w3c.dom.*;
import org.jdom.*;
import org.jdom.Document;
import org.jdom.Element;
public class JDOMParser
{
public static void main(String[] args)
{
// Erzeugung eines SAXBuilders
SAXBuilder builder = new SAXBuilder(false);
// der uns jetzt ein JDOM-Dokument aus unserer XML-Datei erzeugt
Document doc = builder.build(new FileInputStream(getServletContext().getRealPath("/path/to/test.xml")));
// Wir lassen uns das Root-Element (books) geben
Element elRoot = doc.getRootElement();
// Und holen uns eine Liste aller Kinder (book)
List listBooks = elRoot.getChildren();
// Ueber eine Schleife holen wir uns alle Kinder
for (int i=0; i<listBooks.size(); i++)
{
// Hole das i-te Element aus der Liste
Element elBook = (Element)listBooks.get(i);
// Anzeige des Attributs id
String sId = elBook.getAttributeValue("id");
// Anzeige des Inhalts des Knotens title
String sTitle = elBook.getChild("title").getText();
String sAuthor = elBook.getChild("author").getText();
}
// Kleine Manipulation Reihenfolge der beiden Eintraege vertauschen
listBooks.add(listBooks.remove(0));
}
}
getServletContext ist doch nur innerhalb eines Servlets sinnvoll; in einer beliebigen main-Methode gibt es keinen ServletContext, und das lässt sich auch nicht mit einem import ändern.
das geht aber nicht -> eclipse "The import 'import javax.servlet.getServletContext' cannot be resolved"
Code:
import javax.servlet.getServletContext()
Wie mache ich dann diesen Teil ohne getServletContext()?
Code:
// der uns jetzt ein JDOM-Dokument aus unserer XML-Datei erzeugt
Document doc = builder.build(new FileInputStream(getServletContext().getRealPath("/path/to/test.xml")));
Das ist doch auch Unsinn - javax.servlet ist ein Package; das kann keine Methode enthalten. Die Methode ist definiert in im Interface javax.servlet.ServletConfig, aber das hilft dir wenig, da du in der main-Methode keine Servlet-Instanz hast.
Anonymous hat gesagt.:
Wie mache ich dann diesen Teil ohne getServletContext()?
Code:
// der uns jetzt ein JDOM-Dokument aus unserer XML-Datei erzeugt
Document doc = builder.build(new FileInputStream(getServletContext().getRealPath("/path/to/test.xml")));
Irgendwie musst du deinem Programm die Information geben, wo es die Datei suchen muss. Entweder gibst du den Dateinamen relativ zum Arbeitsverzeichnis der Anwendung an, oder du arbeitest mit absolten Pfaden.
Du hattest doch geschrieben, dass du JDOM einsetzen willst (und nicht DOM4J). Mit dem geposteten Code hast du doch eine org.jdom.Document-Instanz namens doc erzeugt. Und die API-Doku von JDOM beschreibt, was man damit machen kann: Doument#getRootElement liefert - nicht völlig überraschend - das Root-Element zurück (also book). Und org.jdom.Element hat die Methode getChild( String name), mit dem man sich ein bestimmtes Kind-Element holen kann.
Ausführlicher geschrieben:
Code:
Element root = doc.getRootElement();
Element ver = root.getChild( "ver");