Ausgabe von Fehlermeldungen einer XSL Transformation

roari

Grünschnabel
Ich habe eine kleine Methode die XSL Vorlagen auf eine XML Datei anwendet und die resultierende XML Datei ausgibt...

Java:
public void actionPerformed(ActionEvent e) 
		{
			StreamSource stylesheet = new StreamSource("XSLTESTSAVE.xsl");
			StreamSource src = new StreamSource("test.xml");
			StreamResult result = new StreamResult(new         File("xsltransformoutput.xml"));
			TransformerFactory factory = TransformerFactory.newInstance();
			
			try {
				Transformer t = factory.newTransformer(stylesheet);
				t.transform(src, result);
			} 
			catch (TransformerConfigurationException ee) 
			{
				
			} 
			catch (TransformerException eee) 
			{
				
			}

		}
Bei Fehlern im Xsl Stylesheet werden diese in der Konsole ausgegeben ...

Beispiel:

FEHLER: 'Syntaxfehler in 'xxxx/xxxxx/=xxxx''.'
SCHWER WIEGENDER FEHLER: 'Die Formatvorlage konnte nicht kompiliert werden.'

Ich würde gerne die erste Fehlermeldung irgendwo ausgeben lassen damit man weiss wo der Fehler liegt. Ich hab schon eine Menge durchprobiert aber ich kann irgendwie nur auf die zweite Fehlermeldung zugreifen.
 
Zuletzt bearbeitet:
Hallo roari,
nutze doch bitte die Java-Tags [ J A V A ] --dein Code-- [ / J A V A ]
das ganze dann nur ohne die Leerzeichen.

So sieht das ganze dann aus:
Java:
public void actionPerformed(ActionEvent e){
        StreamSource stylesheet = new StreamSource("XSLTESTSAVE.xsl");
        StreamSource src = new StreamSource("test.xml");
        StreamResult result = new StreamResult(new File("xsltransformoutput.xml"));
        TransformerFactory factory = TransformerFactory.newInstance();

        try {
            Transformer t = factory.newTransformer(stylesheet);
            t.transform(src, result);
        }catch (TransformerConfigurationException ee){
            
        }catch (TransformerException eee){
            
        }

    }
 
Hat wirklich keiner eine Idee wie ich Fehler bei einer XSL Transformation abgreifen kann? :(

Gibt es denn sonst noch andere Möglichkeiten Transformationen in Java durchzuführen?
 
Hallo,

schau mal hier:
Java:
package de.tutorials;

import java.io.File;

import javax.xml.transform.ErrorListener;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;

public class XsltErrorReporting {

    /**
     * @param args
     */
    public static void main(String[] args) throws Exception{
            StreamSource stylesheet = new StreamSource("XSLTESTSAVE.xsl");
            StreamSource src = new StreamSource("test.xml");
            StreamResult result = new StreamResult(new File("xsltransformoutput.xml"));
            TransformerFactory factory = TransformerFactory.newInstance();
     
            try {
                
                Transformer t = factory.newTransformer(stylesheet);
                t.setErrorListener(new ErrorListener() {
                    
                    @Override
                    public void warning(TransformerException exception)
                            throws TransformerException {
                        // TODO Auto-generated method stub
                        
                    }
                    
                    @Override
                    public void fatalError(TransformerException exception)
                            throws TransformerException {
                        // TODO Auto-generated method stub
                        
                    }
                    
                    @Override
                    public void error(TransformerException exception)
                            throws TransformerException {
                        // TODO Auto-generated method stub
                        
                    }
                });
                t.transform(src, result);
            }catch (TransformerConfigurationException ee){
               
            }catch (TransformerException eee){
               
            }
     
        

    }

}

Gruß Tom
 
Danke für den Tip, der ErrorListener musste allerdings auf die TransformerFactory Instanz gesetzt werden und nicht auf die Transformerinstanz.

Java:
import java.io.File;
 
import javax.xml.transform.ErrorListener;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
 
public class XsltErrorReporting {

	private static void show(Object t)
    {
    	System.out.println(t);
    }
	public static void main(String[] args) throws TransformerException{
            StreamSource stylesheet = new StreamSource("XSLTESTSAVE.xsl");
            StreamSource src = new StreamSource("test.xml");
            StreamResult result = new StreamResult(new File("xsltransformoutput.xml"));
            TransformerFactory factory = TransformerFactory.newInstance();
            factory.setErrorListener(new ErrorListener(){
            	@Override
                public void warning(TransformerException exception)
                        throws TransformerException {
                    show(exception);
                   
                }
               
                @Override
                public void fatalError(TransformerException exception)
                        throws TransformerException {
                	show(exception);
                   
                }
               
                public void error(TransformerException exception)
                        throws TransformerException {
                	show(exception);
                   
                }
            	
            });
           
            try {
                Transformer t = factory.newTransformer(stylesheet);
                t.transform(src, result);
            }catch (TransformerConfigurationException ee){
               
            }catch (TransformerException eee){}
    }
}

ergibt dann bei einem Test mit einer fehlerhaften XSL Datei:

javax.xml.transform.TransformerException: file:///xxxxxxxxxxxxx/XSLTESTSAVE.xsl: line 14: An attribute whose value must be a QName or whitespace-separated list of QNames had the value 'xxxxxxxxx'
javax.xml.transform.TransformerConfigurationException: Die Formatvorlage konnte nicht kompiliert werden.
javax.xml.transform.TransformerConfigurationException: Die Formatvorlage konnte nicht kompiliert werden.
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück