以前にいくつかのテンプレートを使用して作成した既存の xslt ファイルがあります。
現在、要件が変更されており、これらの特定のテンプレートの 1 つを処理する前に、現在評価中のノードに特定の属性があるかどうかを確認する必要があります。
はいの場合、別のテンプレートを最初に呼び出し、次に特定のテンプレートを呼び出す必要があります。
したがって、基本的に私の入力 XML は次のようになります。
<baseNode>
<textGroup>
<title>Title here</title>
<text specAttr="id123456">Text here</text>
<text>Another text</text>
</textGroup>
<paragraph specAttr="id123456">Other text here</paragraph>
<references>
<reference specAttr="id123456">
<data title="1st Reference" ref="http://..." />
</reference>
<reference>
<data title="2nd Reference" ref="http://..." />
</reference>
<reference specAttr="id123456">
<data title="3rd Reference" ref="http://..." />
</reference>
</references>
</baseNode>
XML ファイルを解析すると、結果は次のようになります (実際には、Apache FOP 経由で PDF を作成したいので、結果には FO タグが含まれています。これは、やりたいことを単純化するためです)。
<base>
<title>Title here</title>
<text>Next text has this attribute</text>
<text>Text here</text>
<text>Another text</text>
<text>Next text has this attribute</text>
<p>Other text here</p>
<table>
<head>
<row>
<cell>Title</cell>
<cell>URL</cell>
</row>
</head>
<body>
<row>
<cell col-span="2">
<text>Next text has this attribute</text>
</cell>
</row>
<row>
<cell>1st Reference</cell>
<cell>http://...</cell>
</row>
<row>
<cell>2nd Reference</cell>
<cell>http://...</cell>
</row>
<row>
<cell col-span="2">
<text>Next text has this attribute</text>
</cell>
</row>
<row>
<cell>3rd Reference</cell>
<cell>http://...</cell>
</row>
</body>
</table>
</base>
ええと... XML にはこの属性 ' ' を持つことができる要素がいくつかありますが、この属性をチェックするためにspecAttr
既存の各要素を変更したくありません...<xsl:template>
<xsl:template match="*">
その仕事をしたを追加しようとしましたが、この要素の特定のテンプレートが処理される前に、各要素に一致することを望みました。xsl:template
しかし、これは特定の定義されていないノードに対してのみ機能するようです。
で属性に一致するテンプレートを作成できることもここで既に読みました<xsl:template match="@specAttr">
が、このテンプレートは追加した場合にのみ解析され<xsl:apply-templates select="@*"/>
ます。したがって、既存の各テンプレートを変更して、この行を追加する必要もあります。
テンプレート階層やテンプレート間の継承のようなものを作成することは可能ですか? 現在のノードの実際のテンプレートの前に常に親テンプレートが処理されるということですか?
編集:
reference
要素を見ると、新しいテンプレートを処理する必要がある場所を時々知る必要があることがわかります... a にこの属性がある場合、reference
列スパンが 2 の完全な新しい行を作成する必要があります (ただし、ノードを追加するだけtext
では十分ではないため、4) になる可能性のある別のテーブルにある場合もあります...これについて考えると、これを行う一般的な方法を見つける方法はないと思います...
または、誰か別の賢いアイデアがありますか?
さらに詳しい情報が必要な場合やご質問がある場合は、お気軽にお問い合わせください。
前もって感謝します。
BRgrds、イェンス