使用XSLT显示前N个XML元素

使用XSLT显示前N个XML元素,xml,xslt,xml-parsing,Xml,Xslt,Xml Parsing,我一直用这个把头撞在墙上。我有一系列XML,如下所示: <INTELLCONT id="33954082817" dmd:lastModified="2011-04-05T13:38:05" dmd:startDate="2010-12-30" dmd:endDate="2010-12-30"> <CONTYPE>Journal Article</CONTYPE> <CONTYPEOTHER/>

我一直用这个把头撞在墙上。我有一系列XML,如下所示:

    <INTELLCONT id="33954082817" dmd:lastModified="2011-04-05T13:38:05" dmd:startDate="2010-12-30" dmd:endDate="2010-12-30">
        <CONTYPE>Journal Article</CONTYPE>
        <CONTYPEOTHER/>
        <CLASSIFICATION>Learning and Pedagogical Research</CLASSIFICATION>
        <STATUS>Not Accepted</STATUS>
        <TITLE>The Use of Alternative Quiz Formats to Enhance Students’ Experiences in the Introductory Accounting Course</TITLE>

    </INTELLCONT>
    <INTELLCONT id="11473068032" dmd:lastModified="2012-08-30T14:12:05" dmd:startDate="2009-03-17" dmd:endDate="2010-11-30">
        <CONTYPE>Journal Article</CONTYPE>
        <CONTYPEOTHER/>
        <CLASSIFICATION>Learning and Pedagogical Research</CLASSIFICATION>
        <STATUS>Published</STATUS>
        <TITLE>"Using Debate to Enhance Critical Thinking in the Accounting Classroom: Two Examples of Debates on the Sarbanes-Oxley Act and Tax Policy Issues</TITLE>

期刊文章
学习与教学研究
不接受
在会计入门课程中,使用其他测验形式提高学生的体验
期刊文章
学习与教学研究
出版
“利用辩论加强会计课堂的批判性思维:萨班斯-奥克斯利法案和税收政策问题辩论的两个例子

(为了简洁起见,我删除了一些其他标记)。对于任何xml文件,可能有10-20个
标记。我需要显示
中某些字段的前五个值,但只显示
标记设置为“已发布”的条目。到目前为止的xsl如下:

    <xsl:choose>
    <xsl:when test="dm:Data/dm:Record/dm:INTELLCONT/dm:STATUS = 'Published'">
        <xsl:for-each select="dm:Data/dm:Record/dm:INTELLCONT[1]">
            <xsl:if test="dm:STATUS = 'Published'">
                <p><xsl:value-of select="dm:TITLE" />, 
                    <xsl:choose>
                        <xsl:when test="dm:JOURNAL/dm:JOURNAL_NAME !=''">
                            <i><xsl:value-of select="dm:JOURNAL/dm:JOURNAL_NAME"/></i>, 
                        </xsl:when>
                        <xsl:otherwise>
                            <xsl:text> </xsl:text>
                        </xsl:otherwise>
                    </xsl:choose>
                    <xsl:choose>
                        <xsl:when test="dm:DTM_PUB !=''">
                            <xsl:value-of select="dm:DTM_PUB"/>,
                        </xsl:when>
                        <xsl:otherwise>
                           <xsl:text> </xsl:text>
                       </xsl:otherwise>
                   </xsl:choose>
                    <xsl:value-of select="dm:DTY_PUB"/></p>
            </xsl:if>
        </xsl:for-each>
    </xsl:when>
</xsl:choose>

,,
, 
,

这将显示第一个条目,但前提是
设置为“Published”。这很好,但与上面的xml一样,因为
不是“Published””“什么也看不出来。这也很好,但是如果我把这段代码放进去,并将这一行
枚举到
中,那么我将得到发布
的所有条目,但是如果发布的条目少于5个,那么我将不会得到我需要的5个条目的列表


我知道一定有更好的办法,但我还没想出来。任何帮助都会很好

我不完全理解你对需求的解释,但你似乎用了一种完全错误的方式。您需要了解模板规则,这是用XSLT编写代码的自然方式

如果要显示状态为“已发布”的前五个INTELLCONT元素,请使用

<xsl:apply-templates select="dm:INTELLICONT[dm:STATUS='Published'][position() &lt;= 5]"/>

然后编写模板规则以显示它们:

<xsl:template match=:dm:INTELLICONT">
 <p><xsl:apply-templates/></p>
</xsl:template>

我不完全理解您对需求的解释,但您似乎用了一种完全错误的方式。您需要了解模板规则,这是用XSLT编写代码的自然方式

如果要显示状态为“已发布”的前五个INTELLCONT元素,请使用

<xsl:apply-templates select="dm:INTELLICONT[dm:STATUS='Published'][position() &lt;= 5]"/>

然后编写模板规则以显示它们:

<xsl:template match=:dm:INTELLICONT">
 <p><xsl:apply-templates/></p>
</xsl:template>

请列出一个简单的示例输入文档和该输入的预期输出。请完整的文件,不要碎片。还请指定XSLT的版本。还请确保您的文档列表格式正确。您当前提供的文档片段格式不正确。请列出一个简单的示例输入文档以及该输入的预期输出。请完整的文件,不要碎片。还请指定XSLT的版本。还请确保您的文档列表格式正确。您当前提供的文档片段格式不正确。谢谢您,Michael,这对我很有用。仍然掌握着XSLT,这帮了我很大的忙。谢谢你,Michael,这对我很有用。仍然掌握着XSLT,这帮了大忙。