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実行可能ファイルは、同じ不完全な出力を生成するので、何かを駄目にするのは私のコードではないでしょうか?
ここでは何が起こっていますか?どのようなアイデアをチェックする?
出力ディレクティブを 'xml'に変更すると、期待どおりのサンプルが得られます。いくつかの奇妙な理由から、私が実際に作業しているファイルはまだ不完全な出力を生成していますが、私は先に進んで、現在問題になっているものでなければならないと仮定します。私の動作の違いは、私のサンプルスタイルシートが実際に入力文書のデータを出力しないという事実の結果ではないことを願っています。 – user1156361
見つけた。私のスタイルシートには他のスタイルシートが含まれていて、それらのスタイルシートには、出力ディレクティブが 'text'に設定されていて、効果的にメインディレクティブをオーバーライドしていました。ご協力いただきありがとうございます! – user1156361