2012-02-24 11 views
1

Windows版Xalan 1.10のC++バージョンを使用していますが、XML文書からApache FOPファイルを生成しようとしています。XSLT変換出力に部品がありません

ファイルはかなり大規模で複雑ですが、次のサンプルはうまく問題を説明する:

input.xmlに

<?xml version="1.0" encoding="utf-8"?> 
    <root-xml-element> 
    <MyElement name="Some text"/> 
    </root-xml-element> 

Stylesheet.xsl

<xsl:transform version="1.0" 
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
      xmlns:fo="http://www.w3.org/1999/XSL/Format"> 
    <xsl:output method="text" indent="no"/> 

    <xsl:template match="/"> 
    <fo:root> 
     <xsl:text>(ROOT MATCHED)</xsl:text> 
     <xsl:apply-templates select="root-xml-element"/> 
    </fo:root> 
    </xsl:template> 

    <xsl:template match="root-xml-element"> 
    <xsl:text>(ROOT ELEMENT MATCHED)</xsl:text> 
    <xsl:call-template name="MyTemplate"/> 
    </xsl:template> 

    <xsl:template name="MyTemplate"> 
    <xsl:text>(MY TEMPLATE MATCHED)</xsl:text> 
     <fo:layout-master-set> 
     <fo:simple-page-master master-name="Master" page-width="29.7cm" page-height="21cm"> 
     </fo:simple-page-master> 
     </fo:layout-master-set> 
    </xsl:template> 
</xsl:transform> 

変換はエラーなしで完了しますが、次のようになります不完全出力:あなたが見ることができるようにXalanの

(ROOT MATCHED)(ROOT ELEMENT MATCHED)(MY TEMPLATE MATCHED) 

から

出力ファイルは、出力ファイルには<fo:...>タグはありません。明らかにテンプレートが適用されます。

私はこれらの非常に同じファイルに対して.NETのXSLTプロセッサを実行すると、私は期待して出力を得る:.NETのXSLTプロセッサから

出力ファイル

<?xml version="1.0" encoding="utf-8"?> 
    <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> 
    (ROOT MATCHED)(ROOT ELEMENT MATCHED)(MY TEMPLATE MATCHED) 
    <fo:layout-master-set> 
     <fo:simple-page-master master-name="Master" page-width="29.7cm" page-height="21cm" /> 
    </fo:layout-master-set> 
    </fo:root> 

同じ変換もしますJava Xalanのバージョンから適用されたときに動作します(どちらが正確かわかりません)。一方、コマンドラインのXalan実行可能ファイルは、同じ不完全な出力を生成するので、何かを駄目にするのは私のコードではないでしょうか?

ここでは何が起こっていますか?どのようなアイデアをチェックする?

答えて

2

出力方法がテキストに設定されています。私はXalanがXMLノードではなく実際のテキストのみを出力していると思われます。私は正しい動作であることを覚えていないので、もしXalanや.NETの動作が間違っていたら(おそらく仕様の柔軟性がない場合は)、出力メソッドをXMLに変更するとうまくいくはずです。

+0

出力ディレクティブを 'xml'に変更すると、期待どおりのサンプルが得られます。いくつかの奇妙な理由から、私が実際に作業しているファイルはまだ不完全な出力を生成していますが、私は先に進んで、現在問題になっているものでなければならないと仮定します。私の動作の違いは、私のサンプルスタイルシートが実際に入力文書のデータを出力しないという事実の結果ではないことを願っています。 – user1156361

+0

見つけた。私のスタイルシートには他のスタイルシートが含まれていて、それらのスタイルシートには、出力ディレクティブが 'text'に設定されていて、効果的にメインディレクティブをオーバーライドしていました。ご協力いただきありがとうございます! – user1156361

関連する問題