这是我的输入。我需要消除重复的数字并检查状态是否为空而状态不是Y,我该如何在xslt1.0中执行此操作?
<depositAccount>
<EligibleDepAccount>
<type>TIP</type>
<market>111</market>
<number>12345678</number>
<status>Y</status>
<productCode>OBN</productCode>
</EligibleDepAccount>
<EligibleDepAccount>
<type>TIP</type>
<market>111</market>
<number>12345678</number>
</status>
<productCode>OBN</productCode>
</EligibleDepAccount>
<EligibleDepAccount>
<type>TIP</type>
<market>111</market>
<number>9999999</number>
<status>N</status>
<productCode>OBN</productCode>
</EligibleDepAccount>
<EligibleDepAccount>
<type>TIP</type>
<market>111</market>
<number>5435678</number>
</status>
<productCode>OBN</productCode>
</EligibleDepAccount>
</depositAccount>
输出应该是这样的..
<depositAccount>
<EligibleDepAccount>
<type>TIP</type>
<market>111</market>
<number>12345678</number>
<status>Y</status>
<productCode>OBN</productCode>
</EligibleDepAccount>
<EligibleDepAccount>
<type>TIP</type>
<market>111</market>
<number>9999999</number>
<status>N</status>
<productCode>OBN</productCode>
</EligibleDepAccount>
<EligibleDepAccount>
<type>TIP</type>
<market>111</market>
<number>5435678</number>
</status>
<productCode>OBN</productCode>
</EligibleDepAccount>
</depositAccount>
我尝试使用下面的代码,似乎无法正常工作
# <xsl:for-each-group select="$depositAccount/EligibleDepAccount" group-by="number">
<xsl:if test="count(current-group()) > 1">
<xsl:if test="$depositAccount/EligibleDepAccount/status/text()='Y'">
<xsl:copy-of select="current_group()"/>
</xsl:if>
</xsl:if>
</xsl:for-each-group>
#
请帮助
答案 0 :(得分:1)
如果您使用的是XLST 1.0 porecessor,则使用xsl:for-each-group
将无效。 xsl:for-each-group
是XSLT 2.0的一部分。
要使用XSLT 1.0解决分组问题,您可以使用名为“Meunchian Grouping”的技术。
您的预期输出与您的目标不一致“我需要...检查状态是否为空且状态不是Y”,因为您的输出中有一个值为“Y”的状态元素。
无论如何,我认为你需要的XSLT类型是:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:key name="eligibleDepAccountsByNumber" match="EligibleDepAccount" use="number" />
<xsl:template match="/">
<depositAccount>
<xsl:apply-templates select="depositAccount/EligibleDepAccount[generate-id() = generate-id(key('eligibleDepAccountsByNumber', number)[1])]" />
</depositAccount>
</xsl:template>
<xsl:template match="EligibleDepAccount">
<xsl:if test="status/text() != 'Y'">
<xsl:copy-of select="."/>
</xsl:if>
</xsl:template>
</xsl:stylesheet>