这里尝试使用两个步骤,第一个步骤转换任何模式
[(]?(Fig\.|Figs\.|Figure|Table[s]?)
进入
start
元素和结束模式
[)]
进入
end
元素,然后第二步尝试使用
group-starting-with/ending-with
将此类内容包装到
col1
:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="3.0">
<xsl:param name="start-patterns" as="xs:string">[(]?(Fig\.|Figs\.|Figure|Table[s]?)</xsl:param>
<xsl:param name="end-patterns" as="xs:string">[)]</xsl:param>
<xsl:mode on-no-match="shallow-copy"/>
<xsl:mode name="text-to-elements" on-no-match="shallow-copy"/>
<xsl:template match="root/*[not(self::Refs)][matches(., $start-patterns)]">
<xsl:copy>
<xsl:variable name="text-to-elements" as="node()*">
<xsl:apply-templates mode="text-to-elements"/>
</xsl:variable>
<xsl:for-each-group select="$text-to-elements" group-starting-with="start">
<xsl:choose>
<xsl:when test="self::start">
<xsl:for-each-group select="current-group()" group-ending-with="end">
<xsl:choose>
<xsl:when test="current-group()[last()][self::end]">
<col1>
<xsl:apply-templates select="current-group()"/>
</col1>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="current-group()"/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each-group>
</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="start | end">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="text()" mode="text-to-elements">
<xsl:analyze-string select="." regex="{$start-patterns}">
<xsl:matching-substring>
<start>
<xsl:value-of select="."/>
</start>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:analyze-string select="." regex="{$end-patterns}">
<xsl:matching-substring>
<end>
<xsl:value-of select="."/>
</end>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:value-of select="."/>
</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:template>
</xsl:stylesheet>
如您所见
https://xsltfiddle.liberty-development.net/pPgCcow
,此方法似乎为您发布的输入生成所需的结果,但for元素除外
<Para1>The citations are like (Tables <xref refID="t1">1</xref> and <xref refID="t2">2</xref>; Fig. <xref refID="f1">1</xref>).</Para1>