XPath 排序不持久? [英] XPath sorting not persistent?

查看:25
本文介绍了XPath 排序不持久?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下 XML:

<doc>
<ActivityNarrativeInformation>
  <ActivityID>123456789</ActivityID>
  <ActivityNarrativeInformationID>111111111</ActivityNarrativeInformationID>
  <ActivityNarrativeSequenceNumber>1</ActivityNarrativeSequenceNumber>
  <ActivityNarrativeText>She Sells Sea Shells by the Sea Shore and she also</ActivityNarrativeText>
  </ActivityNarrativeInformation>
 <ActivityNarrativeInformation>
  <ActivityID>123456789</ActivityID>
  <ActivityNarrativeInformationID>111111111</ActivityNarrativeInformationID>
  <ActivityNarrativeSequenceNumber>3</ActivityNarrativeSequenceNumber>
  <ActivityNarrativeText>triple shot frappuccino, extra hot, with whipped cream in a tall cup </ActivityNarrativeText>
</ActivityNarrativeInformation>
<ActivityNarrativeInformation>
  <ActivityID>123456789</ActivityID>
  <ActivityNarrativeInformationID>111111111</ActivityNarrativeInformationID>
  <ActivityNarrativeSequenceNumber>2</ActivityNarrativeSequenceNumber>
  <ActivityNarrativeText>likes to take long walks on the beach while she drinks a</ActivityNarrativeText>
  </ActivityNarrativeInformation>
<ActivityNarrativeInformation>
  <ActivityID>987654321</ActivityID>
  <ActivityNarrativeInformationID>222222222</ActivityNarrativeInformationID>
  <ActivityNarrativeSequenceNumber>486</ActivityNarrativeSequenceNumber>
  <ActivityNarrativeText>It was a dark and stormy night; the rain fell in torrents--except at occasional intervals, when
 </ActivityNarrativeText>
</ActivityNarrativeInformation>
<ActivityNarrativeInformation>
  <ActivityID>987654321</ActivityID>
  <ActivityNarrativeInformationID>222222222</ActivityNarrativeInformationID>
  <ActivityNarrativeSequenceNumber>488</ActivityNarrativeSequenceNumber>
  <ActivityNarrativeText>scene lies), rattling along the housetops, and fiercely agitating the scanty flame of the lamps that
</ActivityNarrativeText>
</ActivityNarrativeInformation>
<ActivityNarrativeInformation>
  <ActivityID>987654321</ActivityID>
  <ActivityNarrativeInformationID>222222222</ActivityNarrativeInformationID>
  <ActivityNarrativeSequenceNumber>487</ActivityNarrativeSequenceNumber>
  <ActivityNarrativeText>was checked by a violent gust of wind which swept up the streets (for it is in London that our
</ActivityNarrativeText>
</ActivityNarrativeInformation>
<ActivityNarrativeInformation>
  <ActivityID>987654321</ActivityID>
  <ActivityNarrativeInformationID>222222222</ActivityNarrativeInformationID>
  <ActivityNarrativeSequenceNumber>489</ActivityNarrativeSequenceNumber>
  <ActivityNarrativeText>struggled against the darkness.
</ActivityNarrativeText>
</ActivityNarrativeInformation>
<ActivityNarrativeInformation>
  <ActivityID>55555555</ActivityID>
  <ActivityNarrativeInformationID>77777777</ActivityNarrativeInformationID>
  <ActivityNarrativeSequenceNumber>31921</ActivityNarrativeSequenceNumber>
  <ActivityNarrativeText>Papa Bear was very big and growly. Mamma Bear was middle-sized and pleasant.
</ActivityNarrativeText>
</ActivityNarrativeInformation>
<ActivityNarrativeInformation>
  <ActivityID>55555555</ActivityID>
  <ActivityNarrativeInformationID>77777777</ActivityNarrativeInformationID>
  <ActivityNarrativeSequenceNumber>31923</ActivityNarrativeSequenceNumber>
  <ActivityNarrativeText>Papa bear loved to fix things around the house; Mama bear loved to grow flowers in her garden; and, Baby bear loved playing in the yard. They were very happy. </ActivityNarrativeText>
</ActivityNarrativeInformation>
<ActivityNarrativeInformation>
  <ActivityID>55555555</ActivityID>
  <ActivityNarrativeInformationID>77777777</ActivityNarrativeInformationID>
  <ActivityNarrativeSequenceNumber>31920</ActivityNarrativeSequenceNumber>
  <ActivityNarrativeText>Once upon a time there were three bears, Papa Bear, Mamma Bear and Baby Bear
</ActivityNarrativeText>
</ActivityNarrativeInformation>
<ActivityNarrativeInformation>
  <ActivityID>55555555</ActivityID>
  <ActivityNarrativeInformationID>77777777</ActivityNarrativeInformationID>
  <ActivityNarrativeSequenceNumber>31922</ActivityNarrativeSequenceNumber>
  <ActivityNarrativeText>And Baby Bear, well, he was small, and
sometimes he squeaked! They lived in a pretty little house on the edge of the forest
</ActivityNarrativeText>
</ActivityNarrativeInformation>
</doc

我需要按 ActivityID 对 ActivityNarrativeInformation 元素进行分组,并以这样的方式连接 ActivityNarrativeText,使其按 ActivityNarrativeSequenceNumber

I need to group ActivityNarrativeInformation elements by ActivityID and concatenate ActivityNarrativeText in such a way, that it is sorted by ActivityNarrativeSequenceNumber

我设法使用以下 XPath 查询 (XPath 3.1) 对元素进行排序sort(//ActivityNarrativeInformation[ActivityID=123456789], (), function($ActivityNarrativeSequenceNumber) {$ActivityNarrativeSequenceNumber})

I managed to sort elements with following XPath query (XPath 3.1) sort(//ActivityNarrativeInformation[ActivityID=123456789], (), function($ActivityNarrativeSequenceNumber) {$ActivityNarrativeSequenceNumber})

结果如下:

<ActivityNarrativeInformation>
  <ActivityID>123456789</ActivityID>
  <ActivityNarrativeInformationID>111111111</ActivityNarrativeInformationID>
  <ActivityNarrativeSequenceNumber>1</ActivityNarrativeSequenceNumber>
  <ActivityNarrativeText>She Sells Sea Shells by the Sea Shore and she also</ActivityNarrativeText>
  </ActivityNarrativeInformation>
<ActivityNarrativeInformation>
  <ActivityID>123456789</ActivityID>
  <ActivityNarrativeInformationID>111111111</ActivityNarrativeInformationID>
  <ActivityNarrativeSequenceNumber>2</ActivityNarrativeSequenceNumber>
  <ActivityNarrativeText>likes to take long walks on the beach while she drinks a</ActivityNarrativeText>
  </ActivityNarrativeInformation>
<ActivityNarrativeInformation>
  <ActivityID>123456789</ActivityID>
  <ActivityNarrativeInformationID>111111111</ActivityNarrativeInformationID>
  <ActivityNarrativeSequenceNumber>3</ActivityNarrativeSequenceNumber>
  <ActivityNarrativeText>triple shot frappuccino, extra hot, with whipped cream in a tall cup </ActivityNarrativeText>
</ActivityNarrativeInformation>

问题是,如果我想通过在末尾添加 /ActivityNarrativeText 来限制以上所有 ActivityNarrativeText

The probelm however is, that if I want to limit down above to just all ActivityNarrativeText by adding /ActivityNarrativeText at the end like this

sort(//ActivityNarrativeInformation[ActivityID=123456789], (), function($ActivityNarrativeSequenceNumber) {$ActivityNarrativeSequenceNumber})/ActivityNarrativeText

sort(//ActivityNarrativeInformation[ActivityID=123456789]/ActivityNarrativeText,(),function($seq){$seq/ActivityNarrativeSequenceNumber})

订单丢失:

<ActivityNarrativeText>She Sells Sea Shells by the Sea Shore and she also</ActivityNarrativeText>
<ActivityNarrativeText>triple shot frappuccino, extra hot, with whipped cream in a tall cup </ActivityNarrativeText>
<ActivityNarrativeText>likes to take long walks on the beach while she drinks a</ActivityNarrativeText>

我做错了什么?

推荐答案

除了正确答案在排序后不使用 / 而是使用 ! 之外,你的一个如果您的排序函数参数选择了正确的元素作为排序键,则尝试实际上会起作用:

In addition to the right answer not to use / after sorting but ! instead, one of your attempts would actually work if your sort function argument selected the right element as the sort key:

sort(//ActivityNarrativeInformation[ActivityID=123456789]/ActivityNarrativeText, (), function($text) {$text/../ActivityNarrativeSequenceNumber})

这篇关于XPath 排序不持久?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆