1

XML ドキュメントを 2 つのドキュメントに変換しています。1 つは目次、もう 1 つは実際のコンテンツです。

次のテンプレートのようなものを使用して XML タグの ID を生成し、目次をドキュメントにマップできるようにします。

<xsl:template match="kop">
  <sometag id="{generate-id(.)}" />
</xsl:template>

ただし、Saxon で処理しても、信頼できる再現可能な ID は作成されません。(たとえば、複数回実行すると異なる ID が与えられます。)

ジェネレーターをシードすることは可能ですか (現在の要素を関数に渡すことで行ったと思っていたように)、またはツリー内のノード番号のように、変換を実行するたびに同じであることが保証される ID を生成することは可能ですか?なにか?

4

2 に答える 2

2

XSLT 2.0 を実装する Saxon 9 を想定すると、適切なアプローチは、kop要素を異なるモードで 2 回処理する 1 つのスタイルシートを記述し、 を使用して 2 つの結果ドキュメントを作成することxsl:result-documentです。1 回の実行で生成された ID は一意になるため、両方のファイルは、処理する入力要素に対して同じ生成 ID を持ちます。

于 2013-11-07T21:22:26.200 に答える
2

おそらく、あなたの処理では、ノードの単純な番号付けを次のように使用できますxsl:number

<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="kop">
    <xsl:variable name="id">
      <xsl:number level="single" count="kop"/>
    </xsl:variable>
    <sometag id="ID{$id}" />
  </xsl:template>
</xsl:stylesheet>

入力あり

<root>
  <kop/>
  <kkk/>
  <kop/>
</root>

上記の XSLT 出力

<sometag id="ID1"></sometag>
<sometag id="ID2"></sometag>

count="kop|kkk"番号付けに他の要素を含めるようなものを使用できます(例では、2 行目の ID2 ではなく ID3 になります)。

(ブラウザ Firefox 25 で XsltCake.com で試しました。)

于 2013-11-07T21:51:03.623 に答える