BASEX - Получение уникальных значений из переменной - PullRequest
0 голосов
/ 14 апреля 2019

Я пытаюсь создать список всех различных префиксов к заголовкам, используемым в базе данных. Заголовки хранятся в теге xml как текст содержимого (в отличие от атрибута).

После извлечения всех заголовков я хочу создать список уникальных префиксов (сами заголовки являются дескрипторами, а не уникальными идентификаторами).

Я дошел до того, что у меня есть префикс из каждого заголовка. То, что я хочу сделать сейчас, это удалить двойные, чтобы оставить только короткий список уникальных значений.

Я пытался использовать different-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"

так что позже я смогу выполнить итерацию по этой последовательности, чтобы найти документы.

1 Ответ

1 голос
/ 14 апреля 2019

Это должно вас довольно далеко:

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'.

...