Parsen und transformieren mit JAVA

Tikonteroga

Erfahrenes Mitglied
Hallo,

ich bin gerade dabei ein Programm zu erstellen, dass eine XML Datei parsen soll und nach einem bestimmten XSL-Stylesheet transformieren soll. Ich habe mich entschieden zum Parsen die SAX-API zu verwenden.

Ich habe jetzt auch mal einen Parser erstellt und ein Bisschen rumexperimentiert.

Code:
XMLReader xmlReader = XMLReaderFactory.createXMLReader();

Ist der standard XMLReader ()siehe Codebeispiel) in der Lage eine XML Datei nach einer DTD oder einem Schema zu validieren ?

Beim XMLReader habe ich folgende Methode entdeckt.

Code:
void setFeature(String name, boolean value) throws SAXNotRecognizedException, SAXNotSupportedException;

Welche Features kann ich denn über String name an dem standard XMLReader anwenden? Im JAVADOC habe ich darüber keine Infos finden können.

Gruß

Tikonteroga
 
Hallo,

also der default Parser scheint, die Features zu unterstützen.

Jetzt bin ich auf ein neues Problem gestoßen.

Ich möchte eine XML-Datei parsen und validieren und den Parsbaum dann in einem Objekt der Klasse SAXSource speichern, damit ich dieses Objekt dann an den Transformer übergeben und nach einem XSL-Stylesheet transformieren kann.

Ich habe das jetzt auch durch folgenden Code hinbekommen.

Code:
XMLReader xmlReader = XMLReaderFactory.createXMLReader();

InputSource inputSource = new InputSource("source.xml");
SAXSource saxSource = new SAXSource(xmlReader, inputSource);
			
FileOutputStream fileOutputStream = new FileOutputStream("destination.html");
StreamResult streamResult = new StreamResult (fileOutputStream);
			
TransformerFactory factory = TransformerFactory.newInstance();
			
File file = new File ("style.xsl");
StreamSource streamSource = new StreamSource(file);
			
Transformer transformer = factory.newTransformer(streamSource);
transformer.transform(saxSource, streamResult);

Mein Problem ist jetzt, dass innerhalb des Konstruktors der Klasse SAXSource

Code:
SAXSource saxSource = new SAXSource(xmlReader, inputSource);

der ContentHandler des xmlReaders mit einem TransformerHandler, der das Interface ContentHandler implementiert neu gesetzt wird und mein eigener wird überschrieben. Mein Ziel ist es jetzt, dass was der Konstruktor der Klasse SAXSource macht selbst zu implementieren.

Ich habe mir jetzt überlegt einen eigenen ContentHandler zu implementieren, der einen TransformerHandler kapselt und dessen Methoden aufruft. Aber mir ist bis jetzt noch unklar wie ich eine SAXSource erstellen kann. Bis jetzt war es mir nur möglich eine Datei zu erstellen, die ich dann wieder einlesen müsste. Gibt es da irgendwie eine andere Möglichkeit ?

Gruß

Tikonteroga
 
Zuletzt bearbeitet:
Hallo,

ich hab mich mit deinem Problem noch nicht befasst, aber es wäre sinnvoller es im Java-Forum zu posten und nicht im XML-Forum, da dein Problem ja bei Java und nicht bei XMl liegt.

MFG

zEriX
 

Neue Beiträge

Zurück