【问题标题】:looping xml with xquery用 xquery 循环 xml
【发布时间】:2018-12-12 16:05:28
【问题描述】:

我需要遍历 xml 并用 xml 文件中的值替换字符串占位符,

<ns0:parameters>
        <ns0:parameter>
            <ns1:paramName>P_1</ns1:paramName>
            <ns1:paramValue>paramValue_1</ns1:paramValue>
        </ns0:parameter>
        <ns0:parameter>
            <ns1:paramName>P_2</ns1:paramName>
            <ns1:paramValue>paramValue_2</ns1:paramValue>
        </ns0:parameter>
    </ns0:parameters>

文本将采用以下形式

Welcome to P_1, this is your first P_2

所以,我们必须使用 xml 中的值更新文本中的占位符(P_1 和 P_2),那么我们如何使用 XQuery 来做到这一点

谢谢

【问题讨论】:

    标签: xml xquery osb


    【解决方案1】:

    使用analyze-string() 函数将文本拆分为与占位符P_n 匹配的部分和不匹配的部分;然后对函数的结果进行如下处理:

    • 对于不匹配的文本片段,将其复制到输出中
    • 对于占位符 $p,将其替换为 //ns0:parameter[ns1:paramName=$p]/ns1:paramValue

    analyze-string() 函数需要 XQuery 3.0。使用 1.0 会有点困难

    【讨论】:

    • 但就我而言,我必须使用 XQuery 1.0,因为我们使用不支持 XQuery 3.0 的旧 oracle ServiceBus 版本
    • 如果您被限制使用旧版本的技术,如果您提前说出来,它可以节省每个人的时间。抱歉,我没有时间制定 XQ 1.0 解决方案 - 正如我所说,这并不容易。
    【解决方案2】:

    对于 XQUERY 1.0,使用循环查找数组位置

    { 对于 $body/ns0:parameter 中的 $parameters $counter

        Welcome to  $parameters/ns0:parameter[1][data(ns1:paramName)] this is your first 
        $parameters/ns0:parameter[$counter + 1][data(ns1:paramName)]P_2 
    

    }

    可以测试一下

    使用计数器变量查找循环序列。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-16
      • 1970-01-01
      相关资源
      最近更新 更多