Xquery Order取决于FN替换的结果



我正在根据XML元素的内容订购搜索结果(来自许多XML文件)。棘手的事情是,我只需要根据此元素中的字符串的一部分来订购结果,即字符串" rep。"之后的数字。例如'BPH,REP。 49 ,t I nr。22'应该在I.harep。 100 ,nr。2233'。我使用Regex将子字符串与FN:更换隔离。正则肯定是正确的,每次都吐出正确的数字。由于某种原因,它无法正确订购。我想念什么?感谢新手。

XML看起来像这样:

<xml>
<idno>I. HA Rep. 100, Nr. 2233</idno>
<idno>I. HA Rep. 100, Nr. 2535</idno>
<idno>BPH, Rep. 113, Nr. 1694</idno>
<idno>BPH, Rep. 113, Nr. 2845</idno>
<idno>BPH, Rep. 192 NL Wittgenstein, IV, 2, 14</idno>
<idno>BPH, Rep. 49, T I Nr. 21</idno>
<idno>BPH, Rep. 49, T I Nr. 22</idno>
<idno>(D) BPH, Rep. 48, Nr. 141</idno>
<idno>(D) BPH, Rep. 48, Nr. 144</idno>
<idno>BPH, Rep. 192, NL Wittgenstein, VI,9,7</idno>
<idno>I. HA Rep. 178 F, Nr. 31</idno>
</xml>

Xquery就是这样:

  for $record in $records
  order by replace($record//idno, '(.*Rep.s)(d+)(.*)', '$2')
  return $record//idno

结果:

I. HA Rep. 100, Nr. 2233
I. HA Rep. 100, Nr. 2535 
BPH, Rep. 113, Nr. 2845 
BPH, Rep. 113, Nr. 1694 
I. HA Rep. 178 F, Nr. 31 
BPH, Rep. 192, NL Wittgenstein, VI,9,7 
BPH, Rep. 192 NL Wittgenstein, IV, 2, 14 
(D) BPH, Rep. 48, Nr. 141 
(D) BPH, Rep. 48, Nr. 144 
BPH, Rep. 49, T I Nr. 21 
BPH, Rep. 49, T I Nr. 22 

所需结果:

(D) BPH, Rep. 48, Nr. 141
(D) BPH, Rep. 48, Nr. 144
BPH, Rep. 49, T I Nr. 21
BPH, Rep. 49, T I Nr. 22
I. HA Rep. 100, Nr. 2233
I. HA Rep. 100, Nr. 2535
BPH, Rep. 113, Nr. 1694
BPH, Rep. 113, Nr. 2845
I. HA Rep. 178 F, Nr. 31
BPH, Rep. 192, NL Wittgenstein, VI,9,7
BPH, Rep. 192 NL Wittgenstein, IV, 2, 14

如果我将"订单"更改为简单的东西 - 例如,通过不同的元素订购而不使用正则订购 - 它可以正常工作。我不知道它的订购方式。我们谈论的是成千上万的Idnos,我无法弄清楚它原本订购的模式。如果有人需要更多示例来弄清楚,我可以添加更多列表。谢谢!!!

我无法使用您的输入和示例XQUERY测试,但请尝试将replace()包装在number() ...

order by number(replace($record, '(.*Rep.s)(d+)(.*)', '$2'))

如果$记录是 <idno>元素的序列,则$记录是 <idno>元素,$记录//iDno将一无所获;您应该只引用$record

最新更新