<xsl:output indent="yes"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="root">
<xsl:copy>
<xsl:for-each-group select="RemittanceInformation" group-by="IndividualRemittance/ExchangeAssignedPolicyID">
<xsl:copy>
<xsl:variable name="pos" select="position()"/>
<xsl:apply-templates select="EntityAssignedNumber, IndividualRemmittance, current-group()/RemittanceDetail">
<xsl:with-param name="pos" select="$pos"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:for-each-group>
</xsl:copy>
</xsl:template>
<xsl:template match="EntityAssignedNumber">
<xsl:param name="pos"/>
<xsl:copy>
<xsl:value-of select="/root/RemittanceInformation[1]/EntityAssignedNumber + $pos - 1"/>
</xsl:copy>
</xsl:template>
我从S / O上的超级有用的martin-honnen获得了这个代码,但有一点不做的是,当RemittanceInformation类型的节点没有IndividualRemmittance时,它根本不会复制它。
我想要的是当有个人转移时,将它们组合在一起以便没有重复(代码已经这样做了),但是当它遇到没有IndividualRemmittance的RemittanceInformation时,它应该正常复制它。
我需要改变什么才能实现这一目标?
答案 0 :(得分:1)
感谢Tomalak的帮助,我做到了! :d
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output indent="yes"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="root">
<xsl:variable name="countComp" select="count(//RemittanceInformation[not(IndividualRemittance)])"/>
<xsl:copy>
<xsl:for-each select="RemittanceInformation[not(IndividualRemittance)]">
<xsl:variable name="pos" select="position()"/>
<xsl:copy>
<xsl:apply-templates select="@* | node()">
<xsl:with-param name="pos" select="$pos"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:for-each>
<xsl:for-each-group select="RemittanceInformation" group-by="IndividualRemittance/ExchangeAssignedPolicyID">
<xsl:copy>
<xsl:variable name="pos" select="position()"/>
<xsl:apply-templates select="EntityAssignedNumber, IndividualRemittance, current-group()/RemittanceDetail">
<xsl:with-param name="pos" select="$pos+$countComp"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:for-each-group>
</xsl:copy>
</xsl:template>
<xsl:template match="EntityAssignedNumber">
<xsl:param name="pos"/>
<xsl:copy>
<xsl:value-of select="/root/RemittanceInformation[1]/EntityAssignedNumber + $pos - 1"/>
</xsl:copy>
</xsl:template>
</xsl:transform>