XSLT 1.0用于连接元素



我有一个XML,它有一个名为externalrequesttid的复杂元素,我的要求是在运行时连接externalrequesttid值。如果输入有5个externalrequesttid值,则需要将这5个值连接起来。我创建的XSL只执行静态转换,我试图在xslt 1.0中完成此逻辑,我是xslt的新手,请帮助

源XML -

<?xml version="1.0" encoding="UTF-8" ?>
<RetrieveMIProcessRequest xmlns="http://xmlns.mycompany.com/RetrieveMI">
   <ExternalRequestIDs>
      <ExternalRequestID>ID1</ExternalRequestID>
   </ExternalRequestIDs>
   <ExternalRequestIDs>
      <ExternalRequestID>ID2</ExternalRequestID>
   </ExternalRequestIDs>
   <ExternalRequestIDs>
      <ExternalRequestID>ID3</ExternalRequestID>
   </ExternalRequestIDs>
   <SourceSystem>SourceSystemName</SourceSystem>
 </RetrieveMIProcessRequest>

为连接externalrequesttid值而创建的转换-

<xsl:template match="/">
    <ns0:RetrieveMIProcessRequest>
      <xsl:for-each select="/ns0:RetrieveMIProcessRequest/ns0:ExternalRequestIDs">
        <xsl:variable name="ExtId"
                      select="concat(&quot;'&quot;,/ns0:RetrieveMIProcessRequest/ns0:ExternalRequestIDs[1]/ns0:ExternalRequestID,&quot;','&quot;,/ns0:RetrieveMIProcessRequest/ns0:ExternalRequestIDs[2]/ns0:ExternalRequestID&quot;'&quot;)"/>
        <ns0:ExternalRequestIDs>
          <ns0:ExternalRequestID>
            <xsl:value-of select="$ExtId"/>
          </ns0:ExternalRequestID>
        </ns0:ExternalRequestIDs>
      </xsl:for-each>
      <ns0:SourceSystem>
        <xsl:value-of select="/ns0:RetrieveMIProcessRequest/ns0:SourceSystem"/>
      </ns0:SourceSystem>
          </ns0:RetrieveMIProcessRequest>
  </xsl:template>

转换后输出-

<?xml version = '1.0' encoding = 'UTF-8'?>
<ns0:RetrieveMIProcessRequest xmlns:ns0="http://xmlns.mycompany.com/RetrieveMI">
   <ns0:ExternalRequestIDs>
      <ns0:ExternalRequestID>'ID1','ID2'</ns0:ExternalRequestID>
   </ns0:ExternalRequestIDs>
   <ns0:ExternalRequestIDs>
      <ns0:ExternalRequestID>'ID1','ID2'</ns0:ExternalRequestID>
   </ns0:ExternalRequestIDs>
   <ns0:ExternalRequestIDs>
      <ns0:ExternalRequestID>'ID1','ID2'</ns0:ExternalRequestID>
   </ns0:ExternalRequestIDs>
   <ns0:SourceSystem>SourceSystemName</ns0:SourceSystem>
</ns0:RetrieveMIProcessRequest>

期望输出-

<?xml version = '1.0' encoding = 'UTF-8'?>
<ns0:RetrieveMIProcessRequest xmlns:ns0="http://xmlns.mycompany.com/RetrieveMI">
<ns0:ExternalRequestIDs>
 <ns0:ExternalRequestID>'ID1','ID2','ID3'</ns0:ExternalRequestID>
</ns0:ExternalRequestIDs>
  <ns0:SourceSystem>SourceSystemName</ns0:SourceSystem>
</ns0:RetrieveMIProcessRequest>

这需要在运行时基于输入请求中的externalrequesttid值来实现。如果输入有5个externalrequesttid值,则需要将这些值连接起来

好的,这个模板应该符合你的需要:

<xsl:template match="/">
    <ns0:RetrieveMIProcessRequest>
            <ns0:ExternalRequestIDs>
                <ns0:ExternalRequestID>
                    <!-- Loop on all ExternalRequestID and concatenate the textual values -->
                    <xsl:for-each select="/ns0:RetrieveMIProcessRequest/ns0:ExternalRequestIDs/ns0:ExternalRequestID">
                        <xsl:text>'</xsl:text>
                        <xsl:value-of select="."/>
                        <xsl:text>'</xsl:text>
                        <xsl:if test="following::ns0:ExternalRequestID">
                            <xsl:text>,</xsl:text>
                        </xsl:if>
                    </xsl:for-each>
                </ns0:ExternalRequestID>
            </ns0:ExternalRequestIDs>
        <ns0:SourceSystem>
            <xsl:value-of select="/ns0:RetrieveMIProcessRequest/ns0:SourceSystem"/>
        </ns0:SourceSystem>
    </ns0:RetrieveMIProcessRequest>
</xsl:template>
我得到的输出是:
<?xml version="1.0" encoding="UTF-8"?>
<ns0:RetrieveMIProcessRequest xmlns:ns0="http://xmlns.mycompany.com/RetrieveMI">
    <ns0:ExternalRequestIDs>
      <ns0:ExternalRequestID>'ID1','ID2','ID3'</ns0:ExternalRequestID>
    </ns0:ExternalRequestIDs>
  <ns0:SourceSystem>SourceSystemName</ns0:SourceSystem>
</ns0:RetrieveMIProcessRequest>

相关内容

  • 没有找到相关文章

最新更新