0

我在 xpath 中遇到问题-我需要检查两个属性值,如果条件满足需要对我自己的值进行硬编码。下面是我的xml。

我需要检查子根内部的条件 - 如果 ItemType=Table1 和 ItemCondition=Chair1 那么我必须给出一个硬编码值“Proceed”(这个硬编码值我将映射到数据映射器的目标端)。

  <Root>
  <SubRoot>
      <ItemType>Table1</ItemType>
      <ItemCondition>Chair1</ItemCondition>
      <ItemValue>
          .......
       </ItemValue>
  </SubRoot>
  <SubRoot>
      <ItemType>Table2</ItemType>
       <ItemCondition>chair2</ItemCondition>
       <ItemValue>
           .......
       </ItemValue>
   </SubRoot>

       ....Will have multiple subroot
   </Root>

我试图定义如下规则,但它抛出错误

  Type: String
  Context:/Root
  Xpath:    substring("Proceed", 1 div boolean(/SubRoot[ItemType="Table1" and ItemCondition="Chair1"]))

但它会抛出错误

  net.sf.saxon.trans.XPathException: Arithmetic operator is not defined for arguments of types (xs:integer, xs:boolean)

有没有其他捷径可以执行此操作。您能帮帮我吗,我付出了更多努力。无法解决它。提前致谢。

4

2 回答 2

1

我不确定你在哪里应用这个,但你正在寻找的 XPath 表达式是:

fn:contains(/Root/SubRoot[2]/ItemCondition, "chair") and fn:contains(/Root/SubRoot[2]/ItemType, "Table")

所以这里是一个适当地返回“Proceed”或“Stop”的例子:

if (fn:contains(/Root/SubRoot[1]/ItemCondition, "Chair") and fn:contains(/Root/SubRoot[2]/ItemType, "Table")) then 'Proceed' else 'Stop'
于 2014-09-17T15:41:17.687 回答
0

为了实现上述条件,我最初在 xpath 中很累,给了我很多错误。我在数据映射器的脚本部分通过简单的 if else 条件实现了

 if ( (input.ItemType == 'Table') and (input.ItemCondition == 'chair')) { 

    output.Item = 'Proceed'}
    else  { 

    output.Item = 'Stop '};
  1. 确保您的优先级。例如,在 xml 结构(或转换后的 POJO)中,必须先检查 ItemType,然后再检查 ItemCondition。
  2. && 似乎对我不起作用,更改为“和”运算符

如果您是第一次尝试实现逻辑。它可能会帮助你。

于 2014-09-18T10:57:39.473 回答