次のマークアップがあります。TR と 1 つまたは 2 つの子 TD が混在するテーブルです。
<table>
<tr>
<td>
<p>XXX</p>
</td>
</tr>
<tr>
<td>
<p>YYYYYY</p>
</td>
<td>
<p>YYYYYY</p>
</td>
</tr>
<tr>
<td>
<p>YYYYYY</p>
</td>
<td>
<p>YYYYYY</p>
</td>
</tr>
<tr>
<td>
<p>YYYYYY</p>
</td>
<td>
<p>YYYYYY</p>
</td>
</tr>
<tr>
<td>
<p>XXX</p>
</td>
</tr>
<tr>
<td>
<p>YYYYYY</p>
</td>
<td>
<p>YYYYYY</p>
</td>
</tr>
<tr>
<td>
<p>YYYYYY</p>
</td>
<td>
<p>YYYYYY</p>
</td>
</tr>
<tr>
<td>
<p>XXX</p>
</td>
</tr>
<tr>
<td>
<p>YYYYYY</p>
</td>
<td>
<p>YYYYYY</p>
</td>
</tr>
<tr>
<td>
<p>YYYYYY</p>
</td>
<td>
<p>YYYYYY</p>
</td>
</tr>
</table>
XSLT 1.0 を使用してこれを変換しようとしています
<AAA>
XXX
<BBB>YYYYY</BBB>
<BBB>YYYYY</BBB>
...
</AAA>
<AAA>
XXX
<BBB>YYYYY</BBB>
<BBB>YYYYY</BBB>
...
</AAA>
...
これがおそらく XSLT でネストされたループにアプローチする最善の方法であるという事実から抽象化すると、どの XPath 式が ??? に入れられますか? 以下は、2 つの TD 子を持つ現在の TR (XXX) のすべての TR 兄弟を選択しますが、次の TR (XXX) までのみ選択します。XXX と YYYYY を含むノードを、TD の子の数に基づいて区別しています。1 = XXX、2 = YYYYY。
<xsl:for-each select="//table/tr">
<xsl:if test="count(td) = '1'">
XXX
</xsl:if>
<xsl:for-each select="???">
all YYYYY up until the next XXX
</xsl:for-each>
</xsl:for-each>
私は "following-sibling::tr[child::td[following-sibling::td]" を持っていますが、それは最後まで YYYYY を持つ次のすべてに一致します - XXX を持つ次の TR までのものだけを選択するにはどうすればよいですか? ?
ありがとう!