私は XSL の初心者であり、学習しながら学んでいます。私は現在、ローカルで作成された XML 用のサード パーティのスタイルシートを編集しています。その一部は次のようになります。
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl">
<c01>
<did>
<unittitle>Annual Reports</unittitle>
<physdesc>19 folders</physdesc>
</did>
<scopecontent>
<p>Annual reports...</p>
</scopecontent>
<c02>
<did>
<container type="box">1</container>
<container type="folder">1</container>
<unittitle>1839-40, 1846 (SPP); 1852 (BPA); 1854 (SPP)</unittitle>
</did>
</c02>
<c02>
<did>
<container type="folder">2</container>
<unittitle>1869, 1872 (BPA); 1873 (IAS)</unittitle>
</did>
</c02>
<c01>
<did>
<unittitle>Bulletins</unittitle>
<physdesc>2 folders</physdesc>
</did>
<scopecontent>
<p>Bulletins...</p>
</scopecontent>
<c02>
<did>
<container type="box">1</container>
<container type="folder">21</container>
<unittitle>Bulletins 1945-46</unittitle>
</did>
</c02>
<c02>
<did>
<container type="box">2</container>
<container type="folder">1</container>
<unittitle>Bulletins 1946-51</unittitle>
</did>
</c02>
</c01>
<c01>
多くの、 などのテーブルを作成する XSL を使用すると、<c02>
部分的に次のようになります。
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" encoding="ISO-8859-1" doctype-public="-//W3C//DTD HTML 4.0 Transitional//EN"/>
<xsl:template match="c02/did">
<tr>
<xsl:choose>
<xsl:when test="ancestor::c01/descendant::c02/did/container">
<xsl:if test="position()=1">
<th><xsl:value-of select="container[1]/@type"/></th>
<th><xsl:value-of select="container[2]/@type"/></th>
</xsl:if>
</xsl:when>
<xsl:otherwise></xsl:otherwise>
</xsl:choose>
</tr>
</xsl:template>
XSL でこのテンプレートの前にテーブルが作成され、複数の列が作成されます。最初の 2 つの列には、 (通常は「ボックス」と「フォルダー」)<th>
をプルするがあります。<container type>
それぞれ<container type>
が ごとに 1 回だけ表示<c01>
され、最初の から取得する必要があり<c02>
ます。が<c02>
1 つしかない<container type>
場合もあれば、<c01>
複数<c02>
の があり両方が<container type="box">
&の場合もあり<container type="folder">
ます。
/の多くのバリエーションposition()=1
と使用を試しましたが、考えられるほとんどすべてです。&のインスタンスごとに常に a を表示するか、が 2 つあるたびに s を表示します。<xsl:choose>
<xsl:when>
<th>
<container type="box">
<container type="folder">
<th>
<container type>
何か案は?
実際の (望ましくない) 出力で更新する
望ましい/実際の XML 出力を提供するように求められました。これは、実際の HTML 出力を伝えるための私の最善の試みです (コピー/貼り付けができない<c01>
ため</scopecontent>
)。
<tr>
<th>Box</th>
<th>Folder</th>
</tr>
<tr>
<td>1</td>
<td>1</td>
<td>1839-40, 1846 (SPP); 1852 (BPA); 1854 (SPP)</td>
</tr>
<tr>
<th>Folder</th>
</tr>
<tr>
<td></td>
<td>2</td>
<td>1869, 1872 (BPA); 1873 (IAS)</td>
</tr>
...
<tr>
<th>Box</th>
<th>Folder</th>
</tr>
<tr>
<td>1</td>
<td>21</td>
<td>Bulletins 1945-46</td>
</tr>
<tr>
<th>Box</th>
<th>Folder</th>
</tr>
<tr>
<td>2</td>
<td>1</td>
<td>Bulletins 1946-51</td>
</tr>
望ましい出力
<tr>
<th>Box</th>
<th>Folder</th>
</tr>
<tr>
<td>1</td>
<td>1</td>
<td>1839-40, 1846 (SPP); 1852 (BPA); 1854 (SPP)</td>
</tr>
<tr>
<td></td>
<td>2</td>
<td>1869, 1872 (BPA); 1873 (IAS)</td>
</tr>
...
<tr>
<th>Box</th>
<th>Folder</th>
</tr>
<tr>
<td>1</td>
<td>21</td>
<td>Bulletins 1945-46</td>
</tr>
<tr>
<td>2</td>
<td>1</td>
<td>Bulletins 1946-51</td>
</tr>