我的问题与:XSLT with overlapping elements?有关--但提议的解决方案对我不起作用。
输入
我有一些TEI编码如下:
<delSpan spanTo="#abcbb6b8-b7bd-4b96-93c1-0a34500e12c0"/>
<lg>
<l>some text that is deleted</l>
</lg>
<lg>
<l>much more text</l>
<l>another line of text</l>
</lg>
<anchor xml:id="abcbb6b8-b7bd-4b96-93c1-0a34500e12c0"/>我想用XSL来处理它,我的输出应该如下所示:
<div class="delSpan">
<div class="lg">
<span>some text that is deleted</span>
</div>
<div class="lg">
<span>much more text</span>
<span>another line of text</span>
</div>
</div>XSLT目前正在尝试使用以下模板:
<xsl:template match="tei:delSpan">
<xsl:variable name="id">
<xsl:value-of select="substring-after(@spanTo, '#')"/>
</xsl:variable>
<xsl:for-each-group select="*" group-ending-with="tei:anchor[@xml:id=$id]">
<div class="delSpan">
<xsl:apply-templates />
</div>
</xsl:for-each-group>
</xsl:template>
<xsl:template match="tei:lg">
<div class="lg">
<xsl:apply-templates/>
</div>
</xsl:template>
<xsl:template match="tei:l">
<span>
<xsl:apply-templates/>
</span>
</xsl:template>但这只会产生以下输出:
<div class="lg">
<span>some text that is deleted</span>
</div>
<div class="lg">
<span>much more text</span>
<span>another line of text</span>
</div>因此,我在问自己,是否有任何共同和简单的解决方案来处理所谓的里程碑-元素和过程,如上文所述?
发布于 2020-02-06 15:10:42
如果您将for-each-group移动到任何delSpan的父元素(或任何您希望应用包装的元素),那么它将如下所示
<xsl:template match="*[delSpan]">
<xsl:for-each-group select="*" group-starting-with="delSpan">
<xsl:choose>
<xsl:when test="self::delSpan">
<xsl:variable name="id-ref" select="substring(@spanTo, 2)"/>
<div class="{local-name()}">
<xsl:for-each-group select="current-group() except ." group-ending-with="id($id-ref)">
<xsl:choose>
<xsl:when test="current-group()[last()] is id($id-ref)">
<xsl:apply-templates select="current-group()[not(position() = last())]"/>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="current-group()"/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each-group>
</div>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="current-group()"/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each-group>
</xsl:template>https://stackoverflow.com/questions/60097375
复制相似问题