[英]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() = 1
或position() = 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.