-3

オブジェクトのタイプと名前を記述する要素を含む 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 を閉じることができないため、これは機能しません。

これで私のジレンマが明確になることを願っています。

ありがとう、

アレック

4

1 に答える 1