Saxonを使用したAltovaXML内からのxsl:result-documentの奇妙な動作

user3813234

私の入力ファイル:

<folders>
    <folder name="a" level="1" metadataFile="LVM20metadata.tsv">
        <subfolder name="a/er" level="2" filter="no" />
        <subfolder name="a/ir" level="2" filter="yes" />
        <subfolder name="a/ar" level="2" filter="no" />
        <subfolder name="a/or" level="2" filter="yes" />
    </folder>
    <folder name="b" level="1" metadataFile="LVM21metadata.tsv">
        <subfolder name="b/er" level="2" filter="no" />
        <subfolder name="b/ir" level="2" filter="yes" />
        <subfolder name="b/ar" level="2" filter="no" />
        <subfolder name="b/or" level="2" filter="yes" />
    </folder>
</folders>

私のスタイルシート:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions " exclude-result-prefixes="fn xs">

    <xsl:template match="/">

        <xsl:apply-templates/>


    </xsl:template>

<xsl:template match="folders">
<xsl:apply-templates/>
</xsl:template> 

<xsl:template match="folder">
<xsl:result-document method="xml" standalone="yes" href="{@name}.xml">
<hello></hello>
</xsl:result-document>
</xsl:template>

</xsl:stylesheet>

2つの結果ドキュメントは作成されません。何故ですか?(saxon9heを使用)

これにより、a.xmlとb.xmlという名前の2つのXMLドキュメントが作成されるべきではありませんか?

アベル

これは、oXygen、または場合によってはAltovaからスタイルシートを実行する場合、実際には既知の機能(または必要に応じてバグ)です。現在のバージョンにまだこの「機能」があるかどうかはわかりませんが、次のように機能しました。

  • 一次結果文書がない場合(つまり、空のシーケンスが生成される場合)
  • そして、二次的な結果文書があります(つまり、xsl:result-document
  • そのような最初の結果ドキュメントをユーザーインターフェイスに表示します
  • 他の結果ドキュメントを通常どおり作成します

これは、ツールUriResolverが何らかの方法で主要な結果をリダイレクトするためだと思いますUriResolver出力がない場合に呼び出されていないが、その後、この動作が得られ、次の二次出力によって呼び出されます。これが、このファイルがシステムの一時ファイルの場所に配置される理由です(「通常の」変換を含むプライマリ出力ドキュメントもあります)。

これに遭遇し、その動作が気に入らない場合はいつでも、簡単な解決策はダミーのプライマリ結果ドキュメントを作成することです。あなたの場合、これは次のようになります。

<xsl:template match="/">
    <root>Primary result doc, please ignore, see other files.</root>
    <xsl:apply-templates/>
</xsl:template>

UIで実行されているかどうかを調べるために使用できるシステムプロパティまたは環境変数があると思います。それがない場合は、静的パラメーターを設定するパラメーターを呼び出しコマンドラインに追加します(残念ながら、これは機能するだけです)。 XSLT 3.0で)、で使用できますuse-when

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事