基本上,我要在这里尝试使用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] 删除。
我来说两句