【问题标题】:xquery extract expression using character positionxquery使用字符位置提取表达式
【发布时间】:2015-09-02 11:46:12
【问题描述】:

我有以下 XML:

<activity>
  <server>digmspt1p:1043SERVER1</server>
</activity>

我需要使用XQuery 提取字符串,直到端口: digmspt1p:1043,这意味着在 : 之后的第 4 位。

有没有实现这个的功能?

我只找到了functx:substring-before-last-match,这仅在 SERVER1 不包含数字时才有帮助。

【问题讨论】:

  • 我不确定我是否完全理解了这个问题?您正在寻找什么输出?你试过 fn:substring-after 吗?
  • 我希望输出:“digmspt1p:1043”。 substring after 不起作用,因为我可能在端口后的字符串中也有数字。我需要在 ':' 之后的第 4 或第 5 个字符之前添加子字符串,因为端口可能也有 5 位数字
  • 您在 4th 或 5th 之后的子字符串的确切条件是什么?第 5 个或第 6 个是字母?我认为结合使用 fn:subtring-before() 来保留 'digmspt1p:' 以及 fn:substring-after 和 fn:substring() 使用提取到第 4 个或第 5 个字符的条件作为端口号,你应该是能够胜任这项工作。您也可以尝试为您的完全匹配条件构建一个正则表达式。
  • @lok​​y 很简单。看我的回答。

标签: string substring xquery concat


【解决方案1】:
let $a := <activity>
                <server>digmspt1p:1043SERVER1</server>
          </activity>

  let $fir := substring-before($a/server, ":")
  let $sec := substring(substring-after($a/server, ":"),1,4)
  let $con := concat($fir, ":",$sec)

  return $con

变量$fir 将存储“:”之前的字符串,在您的情况下它将是'digmspt1p'。

$sec会先获取“:”后面的字符串,然后使用substring()会根据需要截掉前4个字符。

最后,$con 将连接两个变量以获得所需的输出。

HTH。

【讨论】:

  • @lok​​y - 如果答案对您有帮助,请接受它作为答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-26
  • 2016-01-02
  • 2021-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多