2012-02-21 16 views
3

JavaでXSLT変換を実行しようとしています。中括弧で変数を参照しているスタイルシートがコンパイルされない

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="person"> 
     <xsl:variable name="varname">info</xsl:variable> 
     <xsl:element name="{$varname}">content</xsl:element> 
    </xsl:template> 
</xsl:stylesheet> 

(これは、問題を実証する非常に単純化した例です実際には、私は本当に変数を定義し、それを使用する必要があります。):ここではスタイルシートです。

ERROR: 'Variable or parameter 'varname' is undefined.' 
FATAL ERROR: 'Could not compile stylesheet' 
javax.xml.transform.TransformerConfigurationException: Could not compile stylesheet 
    at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl.newTemplates(TransformerFactoryImpl.java:824) 
    at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl.newTransformer(TransformerFactoryImpl.java:619) 

同じスタイルシートはGNUで、MSXMLでは、Internet Explorerで(他のエンジンでは正常に動作します:

DocumentBuilder builder=DocumentBuilderFactory.newInstance().newDocumentBuilder(); 
Document doc=builder.parse(new File("C:\\temp\\test.xsl")); 
DOMSource xsl=new DOMSource(doc); 
Transformer transformer=TransformerFactory.newInstance().newTransformer(xsl); 

実行している、それは例外を発する:ここ

は、Javaコードでありますxsltproc)。私は間違って何をしていますか?この機能はJavaではサポートされていない可能性がありますか?あるいは、まずTransformerFactoryに何らかのパラメータを設定する必要がありますか?

+0

私は再現できない、このJDK 1.6.0_26、どちらを使用して、組み込みのXalanのバージョンもあるバージョンのXalan 2.7.1、とあなたは?おそらく、あなたの 'MyXMLReader'クラスの関連するソースも含めることができます。 –

+0

@Jörn、JDK 1.6.0_24(64ビット)を使用しています。 JDK 1.5と同じ結果です。スタックトレースの行番号のみが異なります。 –

+0

私は 'MyXMLReader'を標準クラス' DocumentBuilderFactory'に置き換えて質問を編集しました。エラーは依然として同じです。 –

答えて

2

エラーメッセージが間違っているようです。実際の問題は、DocumentBuilderが名前空間を認識できるように構成されていないため、xsl:variable宣言が認識されないことです。パーサーは、やはり式を中括弧で認識しています。あなたはDocumentBuilderFactoryにパースを意識名前空間を可能にすることによって、問題を解決することができます

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
dbf.setNamespaceAware(true); 
DocumentBuilder db = dbf.newDocumentBuilder(); 
Document doc = db.parse(new File("C:\\temp\\test.xsl")); 
+0

それは動作します!ありがとうJörn!私はそれのようなものを疑った。 –

関連する問題