2014-09-16 2 views
0

xpath에서 문제가 발생합니다. 두 개의 속성 값을 확인해야합니다. 조건이 만족할 경우 하드 코드를 직접 작성해야합니다. 아래는 내 XML입니다.Mule ESB : Xpath를 사용하여 Datamapper의 상태 점검

내부 서브 루틴과 같은 조건을 확인해야합니다. ItemType = Table1 및 ItemCondition = Chair1 인 경우 하드 코딩 된 값을 'Proceed'(이 하드 코딩 된 값은 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. & &
  3. 하지 당신이 로직을 구현하려고 처음 있다면, 나에게로 변경 '및'연산자

을 작동하는 것 같군. 그것은 당신을 도울 수 있습니다.