0
基本的にここでは、複数のXMLをXSLTを使用して参照XMLの要素の値でマージしソートする方法を説明します。複数のXMLを別のXMLから要素値でソートする
> <xsl:variable name="refXml"
> select="document(concat(replace($refXmlTemp,'^file:',''),'/ref.xml'))"/>
>
>
> <xsl:for-each select="for $x in
> collection(string-join(($inputDir,'select=*.xml;recurse=yes;on-error=fail'),'?'))
> return
> (if (matches($refXml/root/descendant-or-self::issue/id[normalize-space(.)=normalize-space($x/art/item/id)]/number,'\w+')
> and matches($x/art/item/title,'\w+')) then saxon:discard-document($x)
> else())">
> <xsl:sort select="$refXml/root/descendant-or-self::issue/id[normalize-space(.)=/art/item/id]/following-sibling::number"/>
上記のスニペットはすべての入力XMLをマージしましたが、ソートされませんでした。
XSLT xsl:sort
関数は、現在処理中のXML内の値を指す場合にのみ有効です。
ref.xmlをソートの参照として使用するにはどうすればよいかアドバイスしてください。ここで
はref.xmlのサンプル入力です:
<root>
<issue>
<id>wlu-101</id>
<number>1</number>
</issue>
<issue>
<id>wlu-143</id>
<number>2</number>
</issue>
<issue-group>
<issue>
<id>wlu-144</id>
<number>3</number>
</issue>
<issue-group>
<issue>
<id>wlu-185</id>
<number>4</number>
</issue>
</issue-group>
</issue-group>
</root>
Martinさん、ありがとうございましたが、あなたの提案したコードを試してみると、それは想定していた方法で並べ替えられません。 xmlに変更がないようです。 – Viin
問題をソート順で処理したい最低3つまたは4つの入力ファイルに減らし、問題を示すために最小限に減らしたサンプルを表示できますか?私は、物事が失敗したXSLTコードスニペットからしか知ることができないのではないかと懸念しています。どのキーまたはパスが間違っているかを確認するためにサンプルデータを見る必要があります。 –
woot!それは私の最初の試行ではうまくいかないという私のせいです。しかし、子孫は、で働くことができませんでした。数字の価値を得るためにどうやって使うことができましたか?それは可能でしょうか? –
Viin