そのグループ内のすべての tr(item) が td(index=1) 要素の値にそのサフィックスを持っている場合、移動(アイテムから削除してグループに追加)サフィックスをしたいと思います。つまり、'[s2]' をグループ A に、[s1] をグループ B に移動する必要があります。
この XML は次のようになります。
<table xmlns="MyNamespaceUri">
<tr type="group"> <td index="1">Group A</td> </tr>
<tr type="item">
<td index="1"> Item Type A1 [s1],[s2],[s3]</td>
<td index="2">11</td>
</tr>
<tr type="item">
<td index="1"> Item Type A2 [s1],[s2]</td>
<td index="2">21</td>
</tr>
<tr type="item">
<td index="1"> Item Type A3 [s2],[s4]</td>
<td index="2">31</td>
</tr>
<tr type="total"> <td index="2">63</td> </tr>
<tr type="group">
<td index="1">Group B</td>
</tr>
<tr type="item">
<td index="1"> Item Type B1 [s1],[s2],[s3]</td>
<td index="2">12</td>
</tr>
<tr type="item">
<td index="1"> Item Type B2 [s1],[s3]</td>
<td index="2">22</td>
</tr>
<tr type="item">
<td index="1"> Item Type B3 [s1],[s4]</td>
<td index="2">32</td>
</tr>
<tr type="total"> <td index="2">66</td> </tr>
</table>
次のように変換されます。
<table xmlns="MyNamespaceUri">
<tr type="group"> <td index="1">Group A [s2]</td> </tr>
<tr type="item">
<td index="1"> Item Type A1 [s1],[s3]</td>
<td index="2">11</td>
</tr>
<tr type="item">
<td index="1"> Item Type A2 [s1]</td>
<td index="2">21</td>
</tr>
<tr type="item">
<td index="1"> Item Type A3 [s4]</td>
<td index="2">31</td>
</tr>
<tr type="total"> <td index="2">63</td> </tr>
<tr type="group">
<td index="1">Group B [s1]</td>
</tr>
<tr type="item">
<td index="1"> Item Type B1 [s2],[s3]</td>
<td index="2">12</td>
</tr>
<tr type="item">
<td index="1"> Item Type B2 [s3]</td>
<td index="2">22</td>
</tr>
<tr type="item">
<td index="1"> Item Type B3 [s4]</td>
<td index="2">32</td>
</tr>
<tr type="total"> <td index="2">66</td> </tr>
</table>
事前に感謝します。
編集:
XSL/T の初心者である私は、これに数日間取り組んだ後に得たものを以下に示します。「置換」機能を動作させることができませんでした。関数が見つからないか有効な例外をスローしていました(バージョン2.0に変更しましたが)。次に、翻訳を試みました (これはこの問題には適していません)。
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:a="MyNamespaceUri" version="2.0">
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @* "/>
</xsl:copy>
</xsl:template>
<xsl:variable name="arg1" select="'[s2]'"></xsl:variable>
<xsl:template match="a:table/a:tr[@type='group']/a:td">
<xsl:copy-of select="."/>
<xsl:variable name="arg2" select="../../a:tr[@type='item']/a:td[@index='1']"></xsl:variable>
<td>
<xsl:if test="contains($arg2,$arg1)='true'">
<xsl:value-of select="$arg1" />
</xsl:if>
</td>
</xsl:template>
<xsl:template match="a:tr[@type='item']/a:td[@index='1']">
<td index="1">
<xsl:value-of select="translate(., $arg1, '')" />
</td>
</xsl:template>
<xsl:template match="a:table/a:tr[@type='group']/a:td"/>