2013-09-03 2 views
0

하나의 노드 = 다른 노드의 값을 기반으로 특정 노드 집합을 반환하려고합니다.두 개의 다른 노드를 기반으로 노드 집합을 반환하는 것은 동일합니다.

표현은 //*[local-name()='jms-listener']/@busidref=//*[local-name()='jms-bus']/@busid 내가 quickstartGwChannel를 반환 할 필요

<providers> 
     <jms-provider name="JBossMQ" connection-factory="ConnectionFactory"> 
      <jms-bus busid="quickstartGwChannel"> 
       <jms-message-filter 
        dest-type="QUEUE" 
        dest-name="queue/quickstart_helloworld_Request_gw" 
       /> 
      </jms-bus> 
      <jms-bus busid="quickstartEsbChannel"> 
       <jms-message-filter 
        dest-type="QUEUE" 
        dest-name="queue/quickstart_helloworld_Request_esb" 
       /> 
      </jms-bus> 

     </jms-provider> 
    </providers> 

    <services> 
    <service 
     category="FirstServiceESB" 
     name="SimpleListener" 
     description="Hello World"> 
     <listeners> 
      <jms-listener name="JMS-Gateway" 
       busidref="quickstartGwChannel" 
       is-gateway="true" 
      /> 
      <jms-listener name="helloWorld" 
          busidref="quickstartEsbChannel" 
      /> 
     </listeners> 
     <actions mep="OneWay"> 
       <action name="action1" 
       class="org.jboss.soa.esb.samples.quickstart.helloworld.MyJMSListenerAction" 
       process="displayMessage" 
       />  
       <action name="action2" class="org.jboss.soa.esb.actions.SystemPrintln"> 
        <property name="printfull" value="false"/> 
       </action> 
       <!-- The next action is for Continuous Integration testing --> 
       <action name="testStore" class="org.jboss.soa.esb.actions.TestMessageStore"/> 
     </actions> 
    </service> 
    </services> 

에서 부울을 반환합니다.

+0

당신은 말했습니다 - 하나의 노드 = 다른 노드의 값을 기반으로 특정 노드 집합을 반환하려고합니다. * .. 내 질문은 - 하나의 노드 *와 * 다른 노드 *가 무엇입니까? –

답변

0

조건부 검사는 노드의 속성이어야합니다. 이 시도 :

//jms-listener[@busidref=//jms-bus/@busid]/@busidref 

반환 :는 XPath는 그 @busidref 속성이 어떤 jms-bus 노드의 @busid 속성와 동일한 jms-listener 노드를 찾기 위해 말하는

quickstartGwChannel 
quickstartEsbChannel 

. 그런 다음 해당 노드의 @busidref 속성 값을 반환하십시오. 당신이 local-name를 사용해야하는 경우

, 위의 XPath는 다음과 같습니다

//*[local-name()='jms-listener'][@busidref=//*[local-name()='jms-bus']/@busid]/@busidref 

당신은 또한이 게이트웨이 그 속성도 사실 확인 술어의 목록에 추가하려면 다음

//*[local-name()='jms-listener'][@busidref=//*[local-name()='jms-bus']/@busid][@is-gateway='true']/@busidref 
+0

테스트를 위해 jms-bus와 일치하지 않도록 user2578276

+0

이것은 작동합니다./* [@ is-gateway = 'true'및 @busidref = // * [local-name() = 'jms-bus']/@ busid]/@ busidref. 그러나 모든 작업이 is-gateway = 'true'에 의해 수행되고, 단독으로 사용되는 경우 동일한 결과가 생성됩니다. – user2578276

+0

죄송합니다. 문제가 재현되지 않습니다. busidref = "quickstartEsbChannel"을 busidref = "X12"로 변경했을 때 xpath는 "quickstartGwChannel"만 반환했습니다. [이 테스트 온라인] (http://www.xpathtester.com/saved/06b7813c-ab5e-44ba- a13c-2c632963fa42). –

관련 문제