我正在尝试在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) > 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>
答案 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>