1

XSLT を使用して、複数の XML ファイルにまたがる要素の一意の 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 に答える