【问题标题】:XSLT to join elements bpelXSLT 加入元素 bpel
【发布时间】:2023-10-31 16:14:01
【问题描述】:

我有意见

<features>
<feature name="Television" featureSpecID="2000">
    <displayName>TV</displayName>
    <parameters>
        <parameter name="Remote" >
        </parameter>
        <parameter name="Cable Box">
        </parameter>
        <parameter name="Carrier"/>
    </parameter>
</parameters>

我应该在哪里转换

<productname>Remote;Cable Box;Carrier</productname>

我通过执行每个参数来尝试我的代码

<xsl:if test='count(tns:parameters/tns:parameter) > "0"'>
    <xsl:for-each select="tns:parameters/tns:parameter">
       <productname>
         <xsl:value-of select='concat(@name,";")'/>
        </productname>
    </xsl:for-each>
 </xsl:if>

【问题讨论】:

  • 我的代码输出为:RemoteCable BoxCarrier产品名称__c>

标签: xslt append soa bpel


【解决方案1】:

&lt;productname&gt; 节点应该在&lt;xsl:for-each&gt; 循环之外。请修改如下

<productname>
    <xsl:for-each select="tns:parameters/tns:parameter">
        ...
    </xsl:for-each>
</productname>

根据示例输出,需要添加一个条件以不将semi-colon 附加到产品名称的末尾。

<xsl:if test="position() != last()">
    <xsl:value-of select="';'"/>
</xsl:if>

XSLT 代码更改

<productname>
    <xsl:for-each select="tns:parameters/tns:parameter">
        <xsl:value-of select="@name" />
        <xsl:if test="position() != last()">
            <xsl:value-of select="';'"/>
        </xsl:if>
    </xsl:for-each>
</productname>

输出

<productname>Remote;Cable Box;Carrier</productname>

【讨论】:

  • 在 xslt 2 中,您应该使用带分隔符属性的 xslvalue-of: