【问题标题】:OSB : Xquery Comparision Failing IntermittentlyOSB:Xquery 比较间歇性失败
【发布时间】:2015-05-08 16:08:18
【问题描述】:

我的 OSB 代理中有以下情况。

$body/*[1]/xyzflag eq 'true' and (:some other true conditions:)

节点xyzflag 甚至不存在于变量$body 指向的节点下。

大多数情况下,该条件都按预期工作(给出错误)。但有时它会给出真实的。

有人遇到过这种情况吗?对我来说似乎是一个错误。可以帮忙吗?

【问题讨论】:

  • 您的 XQuery 表达式似乎无效(没有名称测试的谓词)。请确保复制代码,不要重新输入;还发布 working 示例(阅读 how to post an SSCCE 了解最小示例的外观)。还包括条件失败的示例输入。
  • 抱歉错字。我试着让它变粗时吃了星号。正确的表达式是 - $body/*[1]/customerId
  • 您能否举一个 $body 的示例值,其中 $body/*[1]/xyzflag eq 'true' 的计算结果出乎意料地为真?

标签: xquery osb oracle-service-bus


【解决方案1】:

您尝试的 XQuery 表达式是错误的。

例如如果您的 XML 如下所示:

<school>
<teacher>
   <isClassteacher>Y</isClassteacher>
</teacher>  

<teacher>
  <isClassteacher>N</isClassteacher>
</teacher>
</school>

那么你的表情将如下所示: 数据($body/teacher[1]/isClassteacher)='Y'

注意:请根据您的要求进行更改。

希望这会有所帮助。

问候

Asutosh

【讨论】:

  • 我看不出他的 XPath 表达式有什么问题。 $body/* 选择 $body 的所有子元素,无论名称如何。见w3.org/TR/xquery/#abbrev
【解决方案2】:

试着把它变成这样:

fn:data($body/[1]/xyzflag)

【讨论】:

【解决方案3】:

如果您正在检查该节点&lt;xyzflag&gt; 是否存在,我建议您使用fn:exists 函数。

这个表达式

$body/*[1]/xyzflag = 'true'

如果节点&lt;xyzflag&gt; 存在,将返回true。节点的内容是否存在不会打扰

【讨论】:

  • $body/*[1]/xyzflag = 'true' 不会仅仅因为存在 而评估为 true。当 xyzflag 元素之一的值等于字符串“true”时,它将评估为 true。见w3.org/TR/xquery/#id-general-comparisons
猜你喜欢
  • 2019-04-18
  • 2011-10-21
  • 1970-01-01
  • 1970-01-01
  • 2017-04-19
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多