使用XSLT2并给出以下类型的文件:
<refbody>
<p>That's line 1<fn>It does this</fn></p>
<b>That's line 2<fn>It does that</fn></b>
<div>
<p>That's line 3<fn>It does this</fn></p>
</div>
</refbody>
我想创建以下内容:
<refbody>
<p>That's line 1<fn id="123">It does this</fn></p>
<b>That's line 2<fn>It does that</fn></b>
<div>
<p>That's line 3<xref href="123"/></p>
</div>
</refbody>
所以这个想法是:
对于每个fn
标签,检查它是否有重复(即相同的文字)。
fn
元素替换当前xref
在href
属性中使用引用的ID。这些fn
元素可以处于任何级别,无论是否分组,它们的位置都是绝对不可预测的。
到目前为止,我已尝试过以下内容:
<xsl:template match="fn">
<xsl:variable name="duplicated" select="//fn[text()=.]"/>
<xsl:choose>
<xsl:when test="count($duplicated) gt 1">
<xsl:choose>
<xsl:when test="not(preceding-sibling::fn[text()=.] or preceding::fn[text()=.])">
<fn id="{generate-id(.)}">
<xsl:value-of select="text()"/>
</fn>
</xsl:when>
<xsl:otherwise>
<xsl:variable name="root" select="name(node()[1])"/>
<xsl:variable name="id" select="$duplicated[1]/@id"/>
<xref href="{$id}"/>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise>
<xsl:copy-of select="."></xsl:copy-of>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
显然,我无法访问此ID,所以这不好。
答案 0 :(得分:2)
使用密钥识别重复项:
UPDATE ImageData
SET (Images = @image1, Login = @Login)
WHERE (some boolean test here);