2016-05-24 17 views
0

我正在從BPEL流程調用webservice。 webservice接受以下參數:將so-each循環中的計數器變量用於soa BPEL中的XSLT

<xsd:element name="Documents" minOccurs="0" nillable="true" 
    <xsd:complexType> 
    <xsd:sequence> 
     <xsd:element name="Entry" minOccurs="0" nillable="true" maxOccurs="unbounded"> 
     <xsd:complexType> 
    <xsd:sequence> 
<xsd:element name="url" minOccurs="0" nillable="true" type="xsd:string 
<xsd:element name="ID" minOccurs="0" nillable="true" type="xsd:string" > 
</xsd:sequence> 
</xsd:complexType> 
</xsd:element> 
</xsd:sequence> 
</xsd:complexType> 
</xsd:element> 

我收到的請求有多個條目。所以我使用了一個<for-each>循環。 <for-each>循環計數存在的條目數並按照計數循環。例如,如果我有3個條目,則<for-each>循環會三次調用Web服務(這正是我想要的)。

但每次調用時,它只會傳遞第一個條目。 在調用webservice之前,我使用了一個轉換活動和一個XSLT。我想以這樣一種方式定義XSLT,它將調用當前的計數值。

例如:

if count = 1.. entry 1 is transformed 
If count = 2.. entry 2 is transformed. 

,我堅持的XSLT低於:我使用的崗位職能,要分配它來計算變量。 當我硬編碼像position() = 1position() = 2,它工作正常,並拉起我需要的條目。但是如何在運行時設置它?

正在使用position()正確的選項還是可以使用別的東西?

注意:計數最初是在啓動<for-each>循環時定義的,我將其設置爲根據條目。

對不起,有這麼長的問題,但我希望有人對此有一個答案。

在此先感謝

<tns:Documents> 
<xsl:for-each  select="/ns0:request/ns0:Documents/ns0:Entry[position()==?????]">  
<tns:Entry> 
<tns:Url> 
<xsl:value-of select="ns0:Url"/> 
</tns:Url> 
<tns:ID> 
<xsl:value-of select="ns0:ID"/> 
</tns:ID> 
</tns:Entry> 
</xsl:for-each> 
</tns:Documents> 

回答

1

爲什麼你在xsl:for-each/@ select屬性上使用(或者試圖使用)position()

您有三個請求。對於每個請求,您想要調用Web服務。在僞代碼中,您要的結構是

<xsl:for-each select="path/to/all/my-requests"> 
    <!--* invoke web service ... *--> 
</xsl:for-each> 
0

你的XSD文件沒有很好地形成。我沒有編輯關於這個問題的問題,因爲它會破壞你的問題的原因。

所以在這裏,我糾正你的問題的一些缺陷:這是孔形成的結果您的輸入:

<xsd:element name="Documents" minOccurs="0" nillable="true"> 
    <xsd:complexType> 
     <xsd:sequence> 
      <xsd:element name="Entry" minOccurs="0" nillable="true" maxOccurs="unbounded"> 
       <xsd:complexType> 
        <xsd:sequence> 
         <xsd:element name="url" minOccurs="0" nillable="true" type="xsd:string" /> 
         <xsd:element name="ID" minOccurs="0" nillable="true" type="xsd:string" /> 
        </xsd:sequence> 
       </xsd:complexType> 
      </xsd:element> 
     </xsd:sequence> 
    </xsd:complexType> 
</xsd:element> 

你合式XSLT看起來是這樣的:

<tns:Documents> 
    <xsl:for-each select="/ns0:request/ns0:Documents/ns0:Entry[position()==?????]">  
     <tns:Entry> 
      <tns:Url> 
       <xsl:value-of select="ns0:Url"/> 
      </tns:Url> 
      <tns:ID> 
       <xsl:value-of select="ns0:ID"/> 
      </tns:ID> 
     </tns:Entry> 
    </xsl:for-each> 
</tns:Documents> 

這些是事實。您尚未提供擴展XSLT來將這兩個數據集轉換爲任何解決此問題的任何內容。提供一個XSL來解決你的問題是有建設性的,你不覺得嗎? :-)