我使用XSLT转换我从网络服务接收的XML。我得到的是这样的:
<benefit>
<statusReasonCode1>Code</statusReasonCode1>
<statusReason1>Reason</statusReason1>
<otherStuff1>blah</otherStuff1>
<otherStuff2>blah</otherStuff2>
</benefit>
我想要的是:
<benefit>
<statusReasonCode1>Code</statusReasonCode1>
<statusReason1>Reason</statusReason1>
<statusReasonText1>Code - Reason></statusReasonText1>
<otherStuff1>blah</otherStuff1>
<otherStuff2>blah</otherStuff2>
</benefit>
我得到的是:
<benefit>
<statusReasonCode1>Code</statusReasonCode1>
<statusReason1>Reason</statusReason1>
<otherStuff1>blah</otherStuff1>
<otherStuff2>blah</otherStuff2>
<statusReasonText1>Code - Reason></statusReasonText1>
</benefit>
这是xslt正在做的事情:
<xsl:template match=''benefit''>
<xsl:copy use-attribute-sets=''newBenefit''>
<xsl:apply-templates/>
<statusReasonCodeText1><xsl:value-of select="statusReasonCode1"/><xsl:text> - </xsl:text><xsl:value-of select="statusReason1"/></statusReasonCodeText1>
</xsl:copy>
</xsl:template>
有没有办法在创建元素时指定位置?
答案 0 :(得分:1)
如果必须在statusReason1
之后插入新元素,那么你可以这样做:
<xsl:template match="statusReason1">
<xsl:copy-of select="."/>
<statusReasonCodeText1><xsl:value-of select="../statusReasonCode1"/><xsl:text> - </xsl:text><xsl:value-of select="."/></statusReasonCodeText1>
</xsl:template>
答案 1 :(得分:0)
你可以这样做:
<xsl:template match="benefit">
<xsl:copy>
<xsl:apply-templates select="statusReasonCode1 | statusReason1"/>
<statusReasonCodeText1>
<xsl:value-of select="statusReasonCode1"/>
<xsl:text> - </xsl:text>
<xsl:value-of select="statusReason1"/>
</statusReasonCodeText1>
<xsl:apply-templates select="otherStuff1 | otherStuff2"/>
</xsl:copy>
</xsl:template>
根据您对输入的了解以及您正在使用的XSLT版本,还有其他方法。
在现实生活中,其他领域是众多且充满活力的,所以我不能真正按名称添加它们
您可以使用以下方式添加它们:
<xsl:apply-templates select="*[not(self::statusReasonCode1 or self::statusReason1)]"/>
或:
<xsl:apply-templates select="*[not(starts-with(name(), 'statusReason'))]"/>