SOAP到XML的转换

时间:2016-07-21 19:24:47

标签: xslt

我正在尝试在XSLT中进行SOAP到XML的转换。

我有一个名为“acctCd”的字段,它位于“externalIDGroup”下,是一个数组。所以我需要检查字段lenth为“acctCd”如果它超过10 charatcer我需要将它修剪为10个字符,如果它更少我需要得到它的值。这个值可以多次出现。请让我知道我的代码中的问题在哪里 输入:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <ns2:ClaimsRequest xmlns:ns2="http://example.com">     
            <externalIDGroup>              
               <acctCd>plan1  Options</acctCd>               
            </externalIDGroup>
            <externalIDGroup>                            
               <acctCd>Plan2 Options</acctCd>               
            </externalIDGroup>          
      </ns2:ClaimsRequest>
   </soap:Body>
</soap:Envelope>

XSL代码:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:dp="http://www.datapower.com/extensions"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
extension-element-prefixes="dp" exclude-result-prefixes="dp"
version="1.0">
<xsl:template match="/">
     <ClaimsRequest>    
            <xsl:for-each select="//externalIDGroup"> 
 <xsl:variable name="acCode">
            <xsl:value-of select="acctCd"/>
            </xsl:variable>

 <xsl:variable name="acCode1"> 
      <xsl:choose>
        <xsl:when test="string-length($acCode) &gt; 10">          
            <xsl:value-of select="substring($acCode, 1,10)"/>
        </xsl:when>
        <xsl:otherwise><xsl:value-of select="$acCode"/></xsl:otherwise>
      </xsl:choose>   
    </xsl:variable>         
                  <claimDetail>                
                    <accountCode><xsl:value-of select="acctCd1"/></accountCode>                             
                  </claimDetail>
            </xsl:for-each>
      </ClaimsRequest>
</xsl:template>
</xsl:stylesheet>

Desired output :

<ClaimsRequest>  
   <claimDetail>    
      <accountCode>plan1 Opti</accountCode>      
   </claimDetail>
   <claimDetail>    
      <accountCode>Plan2</accountCode>      
   </claimDetail>
</ClaimsRequest>

1 个答案:

答案 0 :(得分:0)

我不明白你是如何从输入中得到你想要的输出的。我怀疑你需要做的就是:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:template match="/">
    <ClaimsRequest>    
        <xsl:for-each select="//externalIDGroup"> 
            <claimDetail>                
                <accountCode>
                    <xsl:value-of select="substring(acctCd, 1, 10)"/>
                </accountCode>                             
            </claimDetail>
        </xsl:for-each>
    </ClaimsRequest>
</xsl:template>

</xsl:stylesheet>