0

我正在尝试替换 32 位字符串变量。起初,所有值为“0”。

$bitmask:="00000000000000000000000000000000"

我有一些索引值,应该用“1”替换这些索引中的值。

例如,我有索引值=(3,10)

预期结果应该是;

$bitmask:="00100000010000000000000000000000"

实际上我做到了:) 但是我的位掩码值中有空格字符。我无法删除空格字符。

我的工作代码;

$serviceBits :=  tokenize('0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0',',')

<services>
{
for $t at $pos in $serviceBits
let  $temp := ''
return 
 if($pos = data($myElement/ns:position)) then
   concat($temp, '1')
 else  
   replace(concat($temp, $t)," ","")    
}
</services>

我的工作代码的结果是;

<services>0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0</services>
4

1 回答 1

1

您的代码中的问题是您将一个序列发布到新构造的元素中,该元素被序列化,中间有空格。在这里显式使用string-join

<services>{
  string-join(
    (: all the other code for modification :),
    '' (: Nothing between the individual strings :)
  )
}</services>

无论如何,我不确定你的电话在哪里tokenize以及$bitmap连接在哪里。

要将数组转换为序列,调整一些值并再次返回字符串,请使用string-to-codepoints相应的 reverse 函数。它返回 unicode 代码点,从 0 更改为 1 只需加 1。例如:

let $bitmask := '00000000000000000000000000000000'
return
  codepoints-to-string(
    for $char at $i in string-to-codepoints($bitmask)
    return
      if ($i = (3,10))
        then $char + 1
        else $char
  )
于 2013-10-01T13:26:48.003 回答