XSLT:如何检查重复条目并仅返回具有活动状态的条目(对于具有重复的条目)?

问题描述 投票:0回答:1

我正在尝试输出一个文本文件,该文件将删除重复项,并仅返回该 id 重复项的活动文件。 **例如,如果我在 xml 中有 2 个条目,但条目具有相同的 ID,则仅输出状态为活动的条目。而其他没有重复项的,只需包含在输出中,无论它是活动的还是非活动的。

例如

<Report_Data>
    <Report_Entry>
        <id>1</id>
        <status>Inactive</status>
     </Report_Entry>
     <Report_Entry>
        <id>1</id>
        <status>Active</status>
     </Report_Entry>
     <Report_Entry>
        <id>3</id>
        <status>Active</status>
     </Report_Entry>
     <Report_Entry>
        <id>4</id>
        <status>Inactive</status>
     </Report_Entry>
 </Report_Data>

我尝试使用 xsl:for-each-group 和 group-by 但没有达到结果。

<xsl:template match="Report_Data">
    <row>
        <text>id|status</text>
        <xsl:value-of select="$newline"/>
    </row>
    <xsl:for-each-group select="Report_Entry" group-by="id[../status='Active']">
        <row>
            <id>
                <xsl:value-of select="id"/>
                <xsl:value-of select="$delimiter"/>
            </id>
            <status>
                <xsl:value-of select="status"/>
             </status>
        </row>

输出为:

id|status
1|Active
3|Active

但是期望的输出是

id|status
1|Active
3|Active
4|Inactive

尝试了此代码,但也返回了错误的输出

<xsl:for-each-group select="Report_Entry[status='Active']" group-by="id">

提前致谢。 :)

xml xslt xslt-2.0
1个回答
2
投票

你的问题不太清楚。也许这样的东西适合你:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>

<xsl:template match="/Report_Data">
    <xsl:text>id|status&#10;</xsl:text>
    <xsl:for-each-group select="Report_Entry" group-by="id">
        <xsl:value-of select="id"/>
        <xsl:text>|</xsl:text>
        <xsl:value-of select="if(current-group()/status='Active') then 'Active' else 'Inactive'"/>
        <xsl:text>&#10;</xsl:text>
    </xsl:for-each-group>
</xsl:template>

</xsl:stylesheet>
© www.soinside.com 2019 - 2024. All rights reserved.