プラットフォーム:サクソン9 - XSLT 2.0ソートXML要素の順序XSLTベースの外部ドキュメントで指定された順序
私は定期的に、編集し、更新して保存する必要が3000件のXMLドキュメントを持っています。
処理の一部には、編集前にリポジトリから文書をチェックアウトし、編集が完了したときに定期的に文書を公開することが含まれます。
各ドキュメントには、セクションごとに名前の付いたセクションがあります。テキスト要素内の
<part>
<meta>
<place_id>12345</place_id>
<place_name>London</place_name>
<country_id>GB</country_id>
<country_name>United Kingdom</country_name>
</meta>
<text>
<docs>some blurb</docs>
<airport>some blurb LGW LHR</airport>
<trains>some blurb</trains>
<hotels>some blurb</hotels>
<health>some blurb</health>
<attractions>some blurb</attractions>
</text>
</part>
がほぼ100セクションがあり、すべての編集チームと同じように、彼らは、時折、しかし、定期的に有利なために自分の心を変えます。おそらく年に2回。
現時点では、編集および出版のために、現在の優先順に編集者にXML文書セクションを提示します。この順序は、「stdhdg.xml」と呼ばれる動的に生成された外部ドキュメントに指定されており、このような何か表示されている:
<hdgs>
<hdg name="docs" newsort="10"/>
<hdg name="airport" newsort="30"/>
<hdg name="trains" newsort="20"/>
<hdg name="hotels" newsort="40"/>
<hdg name="health" newsort="60"/>
<hdg name="attractions" newsort="50"/>
</hdgs>
優先ソート順をHDG/@ newsortによって指定されます。
だから私は、正しい順序
<xsl:template match="text">
<xsl:variable name="thetext" select="."/>
<xsl:variable name="stdhead" select="document('stdhdg.xml')"/>
<text>
<xsl:for-each select="$stdhead//hdg">
<xsl:sort data-type="number" order="ascending" select="@newsort"/>
<xsl:variable name="tagname" select="@name"/>
<xsl:variable name="thisnode" select="$thetext/*[local-name() = $tagname]"/>
<xsl:apply-templates select="$thisnode"/>
</xsl:for-each>
</text>
</xsl:template>
に処理するために、このようなテンプレートを使用ししかし、それは非常に遅く、面倒なようで、私はそれをスピードアップするためにキーを使用する必要があると感じています。
この並べ替え操作を行う方法は簡単です。
(編集者の編集方法を変更するために私に聞かないでください。それは私の人生の価値以上のものです)
TIA
Feargal
良い質問、+1。すべての編集の前に再ソートの必要性を完全に排除するソリューションについては、私の答えを参照してください。 :) –