假設XSLT 2.0處理程序可以使用
<xsl:stylesheet
version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs">
<xsl:template match="@* | node()" mode="#all">
<xsl:copy>
<xsl:apply-templates select="@* , node()" mode="#current"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*[note]">
<xsl:copy>
<xsl:for-each-group select="node()" group-ending-with="note">
<xsl:choose>
<xsl:when test="current-group()[last()][self::note]">
<xsl:apply-templates select="current-group()[position() lt last() - 2]"/>
<xsl:apply-templates select="current-group()[last() - 1]" mode="wrap"/>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="current-group()"/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each-group>
</xsl:copy>
</xsl:template>
<xsl:template match="text()" mode="wrap">
<xsl:analyze-string select="." regex="\w+$">
<xsl:matching-substring>
<span id="{current-group()[last()]/@n}" class="{current-group()[last()]/@type}">
<xsl:value-of select="."/>
</span>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:value-of select="."/>
</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:template>
</xsl:stylesheet>
它把輸入
<p>— Cher Cléonte, me dit-il, dès que <pb xml:id="nn2_4" n="4"/> je fus entré dans sa
chambre, je vous ai envoyé chercher afin que vous prissiez part au divertissement que je
dois avoir aujourd'hui. Je dînai<note type="glossary" n="nn2_4n1">déjeunai</note> il y a quelque temps en
un lieu où il se rencontra trois de ces messieurs qui font profession de ne rien ignorer</p>
到結果
<p>— Cher Cléonte, me dit-il, dès que je fus entré dans sa
chambre, je vous ai envoyé chercher afin que vous prissiez part au divertissement que je
dois avoir aujourd'hui. Je <span id="nn2_4n1" class="glossary">dînai</span> il y a quelque temps en
un lieu où il se rencontra trois de ces messieurs qui font profession de ne rien ignorer</p>
即當前從輸入滴note
元件,如果你想在它的地方處理更改
<xsl:when test="current-group()[last()][self::note]">
<xsl:apply-templates select="current-group()[position() lt last() - 2]"/>
<xsl:apply-templates select="current-group()[last() - 1]" mode="wrap"/>
</xsl:when>
到
<xsl:when test="current-group()[last()][self::note]">
<xsl:apply-templates select="current-group()[position() lt last() - 2]"/>
<xsl:apply-templates select="current-group()[last() - 1]" mode="wrap"/>
<xsl:apply-templates select="current-group()[last()]"/>
</xsl:when>
我假設一個note
由純文本節點之前爲你的樣品中,如果我們有例如Je <b>dînai</b><note type="glossary" n="nn2_4n1">déjeunai</note>
它比較複雜。
我只用一個簡單的輸入樣本進行了測試,用更復雜的測試自己,並在遇到問題時回報。
我相信TEI是基於XML的,所以它應該是可能的。您能否修改您的問題以顯示您正在處理的TEI的更大樣本(即圍繞'信天翁'的元素)以及您想要生成的HTML?謝謝! –
請告訴我們您是否希望使用XSLT 2.0或1.0作爲「for-each-group ending-with =」note「'可以輕鬆完成。 –
非常感謝您的關注!我試圖以你所要求的方式修改我的問題:希望這種方式更清晰! 沒有什麼阻止我使用XSLT 2.0,因爲不需要遵從舊瀏覽器。 – DonRamiro