繁体   English   中英

在soa BPEL中使用从for-each循环到XSLT的counter变量

[英]Use the counter variable from a for-each loop into an XSLT in soa BPEL

我正在从BPEL流程调用Web服务。 该Web服务接受以下参数:

<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服务3次(这是我想要的)。

但是每次调用时,它只会传递第一个条目。 在调用Web服务之前,我正在使用转换活动和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>

为什么在xsl:for-each / @ select属性上使用(或尝试使用) position()

您有三个请求。 对于每个请求,您都想调用一个Web服务。 用伪代码,您想要的结构是

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

您的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解决您的问题会很有建设性,您认为吗? :-)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM