# Einzug bei XSLTransformator erzeugen



## Tonipasta (21. Aug 2009)

Hallo! Ich bin langsam am verzweifeln. Ich möchte ein XML File transformieren. Und als Ausgabe soll eine "schöne" Formatierung erzeugt werden. Aber egal, ob Xalan, Saxon etc. ich bekomme das nicht hin. Hier mal mein Beispielcode:


```
import java.io.*;

import javax.xml.transform.*;
import javax.xml.transform.stream.*;
 
public class XSLTransformator {
 
 public static void main(String[] args) throws javax.xml.transform.TransformerException {
 
    File xmlFile  = new File("Test.xml");
    File xsltFile = new File("Prozessor.xsl");
 
    Source xmlSource  = new StreamSource(xmlFile);
    Source xsltSource = new StreamSource(xsltFile);
    
    Result result = new StreamResult(System.out);
		

    TransformerFactory transFact = TransformerFactory.newInstance( ); 
    Transformer trans = transFact.newTransformer(xsltSource);
	    	    
    trans.transform(xmlSource, result);		

  }
  
}
```


Die XML-Datei sieht so aus:

```
<?xml version="1.0"?>
<firma name="Company">
	<angestellte>
		<angestellter name="Heinz" alter="32"/>
		<angestellter name="Susi" alter="40"/>
	</angestellte>
</firma>
```


Und das Stylesheet:

```
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:template match="/">
      <html>
         <head>
            <title>
               <xsl:value-of select="firma/@name"/>
            </title>
        </head>
        <body>
               <xsl:value-of select="firma/@name"/>
	       <table border="2">
	          <xsl:for-each select="/firma/angestellte/angestellter">
                  <tr>
                    <td><xsl:value-of select="@name"/></td>
                    <td><xsl:value-of select="@alter"/></td>
                  </tr>
	          </xsl:for-each>
	       </table>
        </body>
      </html>
   </xsl:template>
</xsl:stylesheet>
```


Die Ausgabe sollte so aussehen: 

```
<html>
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
   
      <title>Company</title>
   </head>
   <body>Company
      <table border="2">
         <tr>
            <td>Heinz</td>
            <td>32</td>
         </tr>
         <tr>
            <td>Susi</td>
            <td>40</td>
         </tr>
      </table>
   </body>
</html>
```

Und bei mir fehlt immer der Einzug. Habe schon mal indent="yes" ins Stylesheet geschrieben, hat aber auch nichts geholfen. Ich würde gerne, das die Tiefe der Ebene der Tags vom Prozessor richtig erkannt und gesetzt werden. Jemand eine Idee?


----------



## SlaterB (21. Aug 2009)

zum Problem nicht direkt,
allerdings könntest du am Ende einen separaten Prozess über die Datei laufen lassen, der alle Tags einliest, die Baumstruktur versteht und eine Formatierung nach Baum-Tiefe durchführt

das nur als Idee, es selber zu programmieren, ob es das schon vorgefertigt gibt oder du nur bei obigen Programm einen Parametern ändern musst, kann ich nicht sagen


----------



## Landei (21. Aug 2009)

Was Sie schon immer über Whitespaces wissen wollten, sich aber nie zu fragen getraut haben. Und ein bisschen mehr.


----------



## musiKk (21. Aug 2009)

SlaterB hat gesagt.:


> allerdings könntest du am Ende einen separaten Prozess über die Datei laufen lassen, der alle Tags einliest, die Baumstruktur versteht und eine Formatierung nach Baum-Tiefe durchführt
> 
> das nur als Idee, es selber zu programmieren, ob es das schon vorgefertigt gibt oder du nur bei obigen Programm einen Parametern ändern musst, kann ich nicht sagen



Gibts beides. Separat formatieren geht mit JTidy und der Transformer kann mittels[c]transformer.setOutputProperty(OutputKeys.INDENT, "yes")[/c] auch selbst formatieren.


----------

