2014-09-16 2 views
0

Я столкнулся с проблемой в xpath - мне нужно проверить два значения атрибута, если условие удовлетворяет требованиям сделать жесткий код моим собственным значением. Ниже мой xml.Mule ESB: Как выполнить проверку условий в Datamapper с помощью Xpath

Мне нужно проверить состояние, например, внутри подката: если ItemType = Table1 и ItemCondition = Chair1, тогда я должен дать твердое кодированное значение «Продолжить» (это жестко закодированное значение i будет отображаться на целевую сторону datamapper).

<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) 

Есть ли другой ярлык способ выполнить это Не могли бы вы помочь мне, я приложил больше усилий. Не удалось решить проблему. Заранее спасибо.

ответ

1

Я не уверен, где вы подаете это, но выражение XPath вы ищете:

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

Так вот пример возвращения «Продолжить» или «Стоп» в зависимости от обстоятельств:

if (fn:contains(/Root/SubRoot[1]/ItemCondition, "Chair") and fn:contains(/Root/SubRoot[2]/ItemType, "Table")) then 'Proceed' else 'Stop' 
+0

Благодарим вас за ответ. Это помогает мне и другую идею для решения решения – star

0

Чтобы реализовать вышеуказанное условие, я изначально устал делать это в xpath, дал мне много ошибок. Я реализован простой, если другое условие в части сценария картографа

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

    output.Item = 'Proceed'} 
    else { 

    output.Item = 'Stop '}; 
  1. данных Убедитесь о своем приоритете. Пример. Здесь, в структуре xml (или преобразованном POJO), сначала нужно проверить ItemType, а затем - ItemCondition.
  2. & & не кажется, работает для меня, изменение «и» оператора

Если вы первый раз пытается реализовать логику. Это может вам помочь.

 Смежные вопросы

  • Нет связанных вопросов^_^