BASEX - 从变量中获取唯一值

问题描述 投票:0回答:1

我正在尝试为数据库中使用的标题创建所有不同前缀的列表。标题作为内容文本存储在xml标记中(与属性相对)。

提取了所有标题后,我想创建一个唯一前缀列表(标题本身是描述符,而不是唯一标识符)。

我已经到了每个标题都有前缀的地步。我现在要做的是删除双打,只留下一个简短的唯一值列表。

我尝试过使用distinct-values(),但在我看来,这是在原始标题(即标签的内容)上运行,而不是在我创建的变量上运行。

我也试过转换成和数组,但这不会产生我想要的结果。

for $name in db:open('DUMMYDATABASE')//body
let $new := $name/mytitle
let $thetitles :=  array { tokenize(replace($new, 's', ''), '-')[1] }
let $result := <thing>{distinct-values($names)}</thing>

return $result

我想做的是从这样的事情:

<tag>con.text1</tag>
<tag>sub.text1</tag>
<tag>con.text2</tag>
<tag>sub.text2</tag>
<tag>para.text</tag>
<tag>super.text</tag>

可迭代的东西,如“con”,“sub”,“para”,“super”

以便我以后能够迭代该序列来查找文档。

xpath xquery basex
1个回答
1
投票

这应该会让你走得很远:

distinct-values(//body/tag/tokenize(., '\.')[1])

适用时

<body>
  <tag>con.text1</tag>
  <tag>sub.text1</tag>
  <tag>con.text2</tag>
  <tag>sub.text2</tag>
  <tag>para.text</tag>
  <tag>super.text</tag>
</body>

它导致四个值:'con', 'sub', 'para', 'super'

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.