Хорошо, так что я понял это, я думаю.
Прежде всего в функции concat-strings я изменил concat на fn: string-join. Это позволило мне передать в качестве аргумента символ, который разделяет соединенные строки.
declare function bs:concat-strings ( $strings as item()+ ) {
let $firstStringToConcat := xs:string(functx:reverse-string($strings[position() = 1]))
let $secondStringToConcat := xs:string(functx:reverse-string($strings[position() = 2]))
let $thirdStringToConcat := xs:string(functx:reverse-string($strings[position() = 3]))
let $concat :=
****fn:string-join(****
($firstStringToConcat,
$secondStringToConcat,
$thirdStringToConcat),****'X'****)
return bs:divide-into-six($concat) } ;
Я увидел, что мой вклад выглядел так:
XXXXXXXX01000011XXXXXXXXXXXXXXXXX01100001XXXXXXXXXXXXXXXXX01110100XXXXXXXX
Очевидно, что он должен был зацикливаться где-то без цикла for, и, поскольку я начинаю с Xquery, я, должно быть, пропустил это. И действительно. Я нашел это в функции проверки, если-восемь:
> declare function bs:check-if-eight ( $strings as item()+ ) {
> **let $fullBinary :=**
> for $string in $strings
> return if (string-length($string) < 8)
> then bs:check-if-eight(concat($string, 0))
> else $string (: add as private below :)
> **return bs:concat-strings($fullBinary)** } ;
Несмотря на то, что было указано выше ключевое слово FOR, переменная $ fullBinary находилась в цикле и создавала пустые места (?), И это было ясно показано, когда я использовал X в качестве разделителя.
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я думал об этом раньше и использовал functx: trim, но по какой-то причине он работает не так, как я ожидал. Так что это может быть не для вас, если у вас есть аналогичные проблемы.
В этот момент стало ясно, что let $ fullBinary не может быть подана в выражении FLWR, по крайней мере, не может вызвать функцию concat-strings. Я изменил его, и теперь он производит только строку, и теперь я пытаюсь выяснить новую последовательность запуска всего модуля, но я думаю, что основная проблема здесь решена.