2014-04-04 61 views
0

請求XML是:如果BPEL條件xpath表達式

<ABC> 
<ServiceCharacteristic> 
    <Code>AAA</Code> 
    <CharacteristicValue> 
     <CharacteristicValue>2222</CharacteristicValue> 
    </CharacteristicValue> 
</ServiceCharacteristic> 

<ServiceCharacteristic> 
    <Code>BBB</Code> 
    <CharacteristicValue> 
     <CharacteristicValue>2223</CharacteristicValue> 
    </CharacteristicValue> 
</ServiceCharacteristic> 

<ServiceCharacteristic> 
    <Code>CCC</Code> 
    <CharacteristicValue> 
     <CharacteristicValue>2224</CharacteristicValue> 
    </CharacteristicValue> 
    </ServiceCharacteristic> 
<Account> 
-------- 
</Account> 

</ABC> 


Need to put a BPEL if condition to check if there is ServiceCharacteristic with code "CCC" 

試圖像下面,但沒有運氣(錯誤(703):將LocationPath表達式「自::節點()/子:: * [ (本地名稱()=「守則」)」是不允許,因爲沒有隱含的上下文節點存在):

**count($variable name/'*asterisk'[local-name()='ServiceCharacteristic' and  ./'*asterisk'[local-name()='Code']='CCC']) > 0** 

任何輸入請..thanks

+0

命令是:count($ variable name/* [local-name()='ServiceCharacteristic'and ./*[local-name()='Code']='CCC'])> 0 – user2128585

+0

這部分是無效的XPath:'./* [local-name()='Code'] ='CCC'?如果您的意思是選擇本地名稱等於'Code'且值等於'CCC'的元素,請嘗試以下方式:'./*[local-name()='代碼'和。='CCC']' – har07

+0

感謝但是在我改變條件後: Count($ variablename/* [local-name()='ServiceCharacteristic'and ./*[local-name()='Code'and。='CCC']]) > 0 編譯器再次顯示錯誤: 錯誤(704):LocationPath表達式「self :: node()/ child :: * [((local-name()=」Code「))和(self :: node ()=「CCC」))]「在中不允許,因爲不存在隱式上下文節點。 – user2128585

回答

0

我粘貼您的XML腳本如問題提出到XPath計算器及以下expresssion我返回true

count(/*[local-name() = 'ABC']/*[local-name() = 'ServiceCharacteristic']/*[local-name() = 'Code' and text() = 'CCC'])>0 

使用在BPEL if看起來是這樣的:

<if> 
    <condition>count($Variable.ABCpart/*[local-name() = 'ABC']/*[local-name() = 'ServiceCharacteristic']/*[local-name() = 'Code' and text() = 'CCC'])>0</condition> 
    <!-- remaining activities--> 
</if> 

這是假設您存儲的稱爲Variable的變量中的XML和稱爲ABCpartmessagePart。您必須根據您的設置調整此表達式才能正常工作。

+0

謝謝你,但沒有再次運氣......只是爲了檢查我是否沒有錯誤,我的情況是如此: count($ ExecuteRequest.parameter/ns8:CustomerOrder/ns8:CustomerOrderItem/ns8:Business // ns8: Product/ns8:CustomerFacingService/* [local-name()='ServiceCharacteristic']/* [local-name()='Code'和text()='PortID'])> 0 已經有// '用於xpath中的抽象是爲什麼bpel會引發以下錯誤的原因: 錯誤(702):LocationPath表達式「child :: text()」在中是不允許的,因爲沒有隱式上下文節點存在。 – user2128585

+0

不,這個錯誤根本沒有意義,因爲表達式中沒有顯式的'child :: text()'。你真的確定這個錯誤是由這個表達式引發的,而不是這個過程的其他部分嗎?而且,這不是BPEL錯誤,所以它可能是您使用的引擎中的錯誤?也許你應該問引擎開發者的郵件列表,他們可以知道更多。 – joergl