Christian Seiler: Apache Ant XSLT Task wirft eine Exception

Beitrag lesen

Hallo,

Wieso wird diese Exception geworfen, wo doch das version-Attribut definiert ist?

Bei mir funktioniert Dein Code anstandslos, allerdings verwendest Du offensichtlich eine GNU-Java-Implementierung (»at gnu.xml.transform.Stylesheet.doParse(libgcj.so.81)«) - und die scheint einen Bug zu haben.

Wenn Du genau hinsiehst, will der nämlich nicht ein Attribut "version", sondern ein Attribut "xsl:version" sehen. Das widerspricht zumindest beim Überfliegen der relevanten Abschnitte dem XSLT-1.0-Standard, denn der verlangt ein Attribut ohne Namespace (d.h. Du machst es richtig, Dein Prozessor ist verbuggt).

Du kannst es jetzt mal mit "xsl:version" probieren (und wenn's dumm geht musst Du alle Attribute mit "xsl:" präfixen) - allerdings solltest Du dann beachten, dass Deine XSLTs dann *INKOMPATIBEL* zu standardkonformen XSLT-Prozessoren werden.

Oder Du könntest versuchen, den XSLT-Prozessor zu wechseln - dazu kannst Du entweder eine andere Factory bei <xslt> angeben (alternativ die Systemeigenschaft javax.xml.transform.TransformerFactory ändern, was aber blöd ist bei Ant). Wenn Du z.B. XALAN verwenden willst müsstest Du folgendes tun (ungetestet):

<xslt ...>  
  <factory name="org.apache.xalan.processor.TransformerFactoryImpl" />  
</xslt>

Oder, wenn Du kein TraX verwenden willst, den Prozessor aber dennoch wechseln willst: Ant bietet da mehrere Möglichkeiten, z.B. (für Xalan 2)

<xslt processor="xalan2" ... />

(auch ungetestet, sollte aber funktionieren)

Dafür muss natürlich der andere Prozessor installiert sein - Xalan kannst Du aber z.B. kostenlos herunterladen und verwenden.

Viele Grüße,
Christian