1

我需要使用 XSLT 为多个 XML 文件中的元素生成唯一 ID。每个有问题的元素都已经提供了一个 ID,该 ID 在其自己的文件中是唯一的,但可以(并且将)与其他文件中节点的 ID 重叠。

我的解决方案是将文件路径连接到现有 ID 的开头,但这会带来 2 个问题:

  1. 发布文件路径是一个不太理想的解决方案,并且可能会带来法律/安全风险。
  2. 它会产生一些非常长且冗长的 ID,其中充满了非法字符(斜线,有人吗?)。输出是一个 HTML 页面,许多访问它的计算机都是旧的,并且运行古老的挑剔浏览器。

这是我正在运行的代码,目前:

<xsl:template match="box">
    <div class="box">
        <xsl:attribute name="id">
            <xsl:value-of select="$file_path" /><xsl:value-of select="./@id" />
        </xsl:attribute>

        ... blah blah content blah ...
    </div>
</xsl:template>

$file_path由系统自动作为参数传入。

所以,是的,虽然这(技术上)有效,但它远非鼻烟。我想做的是$file_path在与另一个 ID 一起干扰之前对变量进行哈希处理。它不必非常安全,只需经过足够的模糊处理,使其不像路径,完全是字母数字,并且最好更短(如果所有散列长度相同,则加分)。

最后(这是关键)几乎可以肯定它必须在 XSLT 1.0 中工作。也许可以说服升级的权力,但出于所有意图和目的,我需要知道是否可以在没有 XSLT 2 的情况下完成。

4

1 回答 1

1

使用 xsl:param,将一些唯一键(如 GUID)传递给转换。它会给你唯一的ID。

于 2013-09-13T16:10:28.197 回答