【问题标题】:XPath as a string variable / propertyXPath 作为字符串变量/属性
【发布时间】:2019-06-23 04:53:44
【问题描述】:

我从数据库中检索 XPath(通过 DSS),我需要将它应用到正文。这有可能吗?

举个例子,假设我有这个 xml 请求

<custom>
    <id>24</id>
    <text>Some Text</text>
    <firstOccurId>123456</firstOccurId>
    <secondOccurId>654321</secondOccurId>
</custom>

我取 ID (24) 并调用模板,它将返回

<replacements>
    <row>
        <value>ABCDEFG</value>
        <xpath>/*/custom/firstOccurId</xpath>
    </row>
    <row>
        <value>GFEDCDBA</value>
        <xpath>/*/custom/secondOccurId</xpath>
    </row>
</replacements>

现在我需要对请求应用 xpath 并更改它的值,所以转换后的请求正文如下所示

<custom>
    <id>24</id>
    <text>Some Text</text>
    <firstOccurId>ABCDEFG</firstOccurId>
    <secondOccurId>GFEDCDBA</secondOccurId>
</custom>

我尝试了评估()并将 XPath 字符串放入调用模板中介的 {{}} 中,但都没有成功。

【问题讨论】:

  • evaluate(..) 函数需要像 Saxon 9 的商业版本一样的 XSLT-3.0 处理器。提供此商业版本的替代方案需要比您提供的信息更多的信息 - 如果可能的话。
  • WSO2 EI 确实有 evaluate(),但老实说,我不知道它到底做了什么。
  • AFAIK evaluate(...) 将参数视为 XPath 表达式。
  • 是的,现在确实有效,这是我的问题。

标签: xpath wso2 wso2esb synapse


【解决方案1】:

evaluate() 是正确答案。更具体地说,对于这个例子,我需要将custom请求存储在属性中,获取replacements,循环遍历它们,在这个循环中,我需要将完整的xpath存储在属性中作为fn:concat('$body', //el:row/el:xpath, '/text()'),用原始有效负载丰富正文和将存储的 xpath 应用为evaluate()

【讨论】:

    猜你喜欢
    • 2018-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-31
    • 2018-02-14
    • 1970-01-01
    • 2017-07-02
    • 1970-01-01
    相关资源
    最近更新 更多