基本的に、ここで私が試みているのは、XSLTを使用して、参照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をマージしましたが、ソートされていませんでした。
XSLTxsl: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>
交換する<xsl:sort select="$refXml/root/descendant-or-self::issue/id[normalize-space(.)=/art/item/id]/following-sibling::number"/>
と
<xsl:sort select="key('ref', /art/item/id, $refXml)/number"/>
定義後
<xsl:key name="ref" match="issue" use="normalize-space(id)"/>
別の用途として<xsl:sort select="$refXml//issue[normalize-space(id)=current()/art/item/id]/number"/>
。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加