XSLT:如何检查重复并仅返回具有活动状态的ID

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

我正在尝试输出一个文本文件,该文件将删除重复项并仅返回活动状态。 例如:

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

我尝试使用 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个回答
0
投票

你的问题不太清楚。也许这对你有用:

<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.