Умножить строку на целое число? - PullRequest
1 голос
/ 19 июня 2020

В python, например, я могу сделать это

"X" * 3

или, что более важно (в данном случае)

"XO" * 3

и получить XXX и XOXOXO соответственно.

Я пытаюсь повторить это с помощью xpath / xquery. В идеале это должно быть что-то вроде

"XO" * count(something)

Самое близкое, что я мог бы получить, - это своего рода подделка вывода путем создания строки с длиной, близкой к моей оценке того, что будет count(something), а затем нарежьте его substring(). Итак, если мой count(something) вернет 2

substring("XXX",1,count(//something))

, вернет XX. Это немного усложняется, если моя строка XO, и в этом случае мне нужно изменить ее на

substring("XOXOXO",1,count(//something) * 2)

, чтобы получить XOXO.

Однако, в дополнение к ощущению хакерства , для этого требуется оценка count() и создание строки правильной длины (+ некоторый запас прочности).

Есть ли лучший способ сделать это в xpath или xquery?

1 Ответ

5 голосов
/ 19 июня 2020

Вы можете использовать ((1 to 3) ! 'XO') => string-join() и, конечно, вы можете поместить это в функцию, если хотите, с параметром для строки и количеством «умножений», которое вы хотите:

declare function local:multiply-string($input as xs:string, $factor as xs:integer) as xs:string
{
   ((1 to $factor) ! $input) => string-join() 
};

local:multiply-string('XO', 3)

https://xqueryfiddle.liberty-development.net/pPqteBa/1

...