我有一个问题,我确信它实际上很容易回答,但我无法弄清楚,而且我之前尝试询问它的尝试过于复杂。
我有一个从 TEI XML 生成的页面,其中包含一些与图像文件相关联的文本:
<sourceDoc xml:id="textContent">
<surfaceGrp xml:id="wall" n="West Wall">
<surface xml:id="EETS.QD.60">
<label>Verse 60</label>
<graphic url="ww_test_1.jpg"/>
</surface>
<surface xml:id="EETS.QD.63">
<label>Verse 63</label>
<graphic url="ww_test_2.jpg"/>
</surface>
<surface xml:id="EETS.QD.65">
<label>Verse 65</label>
<graphic url="ww_test_3.jpg"/>
</surface>
<surface xml:id="EETS.QD.66">
<label>Verse 66</label>
<graphic url="ww_test_4.jpg"/>
</surface>
<surface xml:id="EETS.QD.68">
<label>Verse 68</label>
<graphic url="ww_test_5.jpg"/>
</surface>
<surface xml:id="EETS.QD.69">
<label>Verse 69</label>
<graphic url="ww_test_6.jpg"/>
</surface>
</surfaceGrp>
</sourceDoc>
(我已从此处的示例中删除了文本以避免额外的麻烦)
我根据与每条文本相关联的图像的缩略图在页面顶部生成一个标题。所以www_test_1-thumbnail.jpg
,等等。使用下面的 xsl,我可以让标题正确显示(tei 是 tei 命名空间,可以在 处声明xmlns:tei="http://www.tei-c.org/ns/1.0"
):
<xsl:template match="tei:surface">
<div id="centerMenu">
<xsl:apply-templates select="tei:graphic" mode="list"/>
</div>
</xsl:template>
<xsl:template match="tei:graphic" mode="list">
<span class="menuitem" id="image_thumbnail">
<a class="nav_link">
<xsl:attribute name="href">
<xsl:value-of select="concat(substring(@url,1,string-length(@url)-4),'.html')"/>
</xsl:attribute>
<img class="thumbnail">
<xsl:attribute name="src">
<xsl:value-of
select="concat(substring(@url,1,string-length(@url)-4),'-thumbnail.jpg')"
/>
</xsl:attribute>
<xsl:attribute name="alt">
<xsl:value-of select="../tei:label"/>
</xsl:attribute>
</img>
</a>
</span>
</xsl:template>
我的问题是有时我需要从一<surfaceGrp>
组元素跳到另一组元素。因此,例如,如果有一个“南墙” <surfaceGrp>
,我需要能够获取即将到来的元素的 url,以便我可以跳转到下一个缩略图块:
<sourceDoc xml:id="textContent">
<surfaceGrp xml:id="wall" n="West Wall">
<surface xml:id="EETS.QD.60">
<label>Verse 60</label>
<graphic url="ww_test_1.jpg"/>
</surface>
<surface xml:id="EETS.QD.63">
<label>Verse 63</label>
<graphic url="ww_test_2.jpg"/>
</surface>
<surface xml:id="EETS.QD.65">
<label>Verse 65</label>
<graphic url="ww_test_3.jpg"/>
</surface>
<surface xml:id="EETS.QD.66">
<label>Verse 66</label>
<graphic url="ww_test_4.jpg"/>
</surface>
<surface xml:id="EETS.QD.68">
<label>Verse 68</label>
<graphic url="ww_test_5.jpg"/>
</surface>
<surface xml:id="EETS.QD.69">
<label>Verse 69</label>
<graphic url="ww_test_6.jpg"/>
</surface>
</surfaceGrp>
<surfaceGrp xml:id="wall" n="South Wall">
<surface xml:id="EETS.QD.70">
<label>Verse 70</label>
<graphic url="sw_test_1.jpg"/>
</surface>
</surfaceGrp>
</sourceDoc>
让事情变得更加复杂的是,有时所有东西都必须被包装在另一个<surfaceGrp>
元素中,因为它们是一个更大的块的一部分。这可能看起来像这样:
<sourceDoc xml:id="textContent">
<surfaceGrp xml:id="g.8" n="gathering">
<surfaceGrp xml:id="f.66" n="folio">
<surface n="recto">
<label>Verse 60</label>
<graphic url="pageimage1.jpg"/>
</surface>
<surface n="verso">
<label>Verse 63</label>
<graphic url="pageimage2.jpg"/>
</surface>
</surfaceGrp>
<surfaceGrp xml:id="f.67" n="folio>
<surface n="recto">
<label>Verse 65</label>
<graphic url="pageimage3.jpg"/>
</surface>
<surface n="verso">
<label>Verse 66</label>
<graphic url="pageimage4.jpg"/>
</surface>
</surfaceGrp>
</surfaceGrp>
<surfaceGrp xml:id="g.9" n="gathering">
<surfaceGrp xml:id="f.67" n="folio>
<surface n="recto">
<label>Verse 68</label>
<graphic url="pageimage5.jpg"/>
</surface>
<surface n="verso">
<label>Verse 69</label>
<graphic url="pageimage6.jpg"/>
</surface>
</surfaceGrp>
</surfaceGrp>
</sourceDoc>
所以我的问题是双重的:
- 如何让我的 xsl 显示第一
<surfaceGrp>
棵树中的所有内容?我当前的代码将为孩子显示两个表面,<surfaceGrp>
但不是全部。 - 在上面的示例中,我将如何生成从第 66 节到第 68 节的链接,它与从第 65 节到第 66 节的链接有根本的不同吗?我可以使用我拥有的一些复杂的代码跳到下一个项目和下一个项目
<surfaceGrp>
,但这是一个令人难以置信的错误解决方案,并且一旦<surfaceGrp>
添加第二层就会完全中断。如果有一个标准的解决方案,我将不胜感激朝正确的方向点头。
xsl当前使用我的代码生成的html代码如下:
<div id="centerMenu">
<span class="menuitem" id="image_thumbnail">
<a class="nav_link" href="ww_test_1.html">
<img class="thumbnail" src="../../Quis_Dabit/Clopton/Thumbnails/ww_test_1-thumbnail.jpg" alt="First Panel" />
</a>
</span>
<span class="menuitem" id="image_thumbnail">
<a class="nav_link" href="ww_test_2.html">
<img class="thumbnail" src="../../Quis_Dabit/Clopton/Thumbnails/ww_test_2-thumbnail.jpg" alt="Second Panel" />
</a>
</span>
<span class="menuitem" id="image_thumbnail">
<a class="nav_link" href="ww_test_3.html">
<img class="thumbnail" src="../../Quis_Dabit/Clopton/Thumbnails/ww_test_3-thumbnail.jpg" alt="Third Panel" />
</a>
</span>
<span class="menuitem" id="image_thumbnail">
<a class="nav_link" href="ww_test_4.html">
<img class="thumbnail" src="../../Quis_Dabit/Clopton/Thumbnails/ww_test_4-thumbnail.jpg" alt="Fourth Panel" />
</a>
</span>
<span class="menuitem" id="image_thumbnail">
<a class="nav_link" href="ww_test_5.html">
<img class="thumbnail" src="../../Quis_Dabit/Clopton/Thumbnails/ww_test_5-thumbnail.jpg" alt="Fifth Panel" />
</a>
</span>
<span class="menuitem" id="image_thumbnail">
<a class="nav_link" href="ww_test_6.html">
<img class="thumbnail" src="../../Quis_Dabit/Clopton/Thumbnails/ww_test_6-thumbnail.jpg" alt="Sixth Panel" />
</a>
</span>
</div>
<div id="rightMenu">
<span class="menuitem" id="previousItem">
<a class="nav_link">Previous</a>
</span>
<span class="menuitem" id="nextItem">
<a class="nav_link" href="ww_test_2.html">Next</a>
</span>
</div>