オブジェクトのタイプと名前を記述する要素を含む XML があります。オブジェクトはタイプ別に、Animated=[Dog, Person] および Inanimate=[Plant, Automobile] カテゴリにグループ化されます。サンプル XML と目的の HTML を以下に示します。
また、Animate/Inanimate グループにマッピングできなかったタイプ (Cat など) を教えてくれる、包括的な XSL テンプレートも必要です。
私はサクソン9.4を使用しています。
XML:
<items>
<item>
<type>Dog</type>
<name>Fido</name>
</item>
<item>
<type>Person</type>
<name>Bob</name>
</item>
<item>
<type>Plant</type>
<name>Tomato</name>
</item>
<item>
<type>Automobile</type>
<name>Honda</name>
</item>
<item>
<type>Automobile</type>
<name>Ford</name>
</item>
HTML:
<table>
<th>There are 2 Animated objects</th>
<tr>
<td>Dog Fido</td>
<td>Person Bob</td>
</tr>
</table>
<table>
<th>There are 3 Inanimate objects</th>
<tr>
<td>Plant Tomato</td>
<td>Automobile Honda</td>
<td>Automobile Ford</td>
</tr>
</table>
*コメントに応じて以下を追加*
一部のオブジェクト タイプと Animate/Inanimate グループ間のマッピングは経験的にわかっていますが、マッピングは不完全です。したがって、この表面的な例では、Cat タイプが検出された場合、キャッチオール テンプレートで出力する必要があります。
私が遭遇した最大の問題は、単一の を印刷し、複数も印刷すること<tr>
でした。<th>
を含むテンプレートで a を出力してmatch="items[item/type='Dog'] | items[item/type='Person']"
から再帰的に出力しようとしました<xsl:apply-template select="items"/>
が、Cat.
でテンプレートも作成しようとしましたが、match="item[type='Dog' or type='Person']"
印刷する<th>
には<xsl:if test="position() = 1">
を印刷する必要がありました<table><th>..</th>
。</table>
しかし、グループ内の最後の項目を処理するまで XSLT を閉じることができないため、これは機能しません。
これで私のジレンマが明確になることを願っています。
ありがとう、
アレック