You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

XSLT循环优化:过滤0分数据并补全有效学生记录

实现方案:筛选非0分学生并展示前2条有效记录

核心思路

不要先取前2条再过滤,而是先筛选所有成绩≠0的学生记录,再从中取前2条展示。这种方式自动解决了"前2条包含0分时补充后续有效记录"的问题,因为过滤后的列表里已经没有0分数据,直接取前2条就能保证有效性。

代码实现

1. 示例XML数据(students.xml)

<?xml version="1.0" encoding="UTF-8"?>
<students>
  <student>
    <name>张三</name>
    <score>0</score>
  </student>
  <student>
    <name>李四</name>
    <score>85</score>
  </student>
  <student>
    <name>王五</name>
    <score>90</score>
  </student>
  <student>
    <name>赵六</name>
    <score>75</score>
  </student>
</students>

2. XSLT处理逻辑(student_scores.xsl)

直接在xsl:for-each的select属性中完成过滤+取前2条的操作,无需额外判断:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <html>
      <body>
        <h2>有效学生成绩(前2条)</h2>
        <table border="1">
          <tr>
            <th>姓名</th>
            <th>成绩</th>
          </tr>
          <!-- 筛选成绩≠0的学生,同时只取前2条 -->
          <xsl:for-each select="students/student[score != 0][position() <= 2]">
            <tr>
              <td><xsl:value-of select="name"/></td>
              <td><xsl:value-of select="score"/></td>
            </tr>
          </xsl:for-each>
        </table>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

如果成绩字段可能是字符串类型,可将条件改为number(score) != 0,确保数值比较的准确性。

3. PHP调用代码

使用PHP的DOMDocument和XSLTProcessor完成XML与XSLT的结合:

<?php
// 加载XML和XSLT文件
$xmlDoc = new DOMDocument();
$xmlDoc->load('students.xml');

$xslDoc = new DOMDocument();
$xslDoc->load('student_scores.xsl');

// 初始化XSLT处理器并执行转换
$processor = new XSLTProcessor();
$processor->importStylesheet($xslDoc);
echo $processor->transformToXML($xmlDoc);
?>

边界情况说明

  • 如果符合条件的非0分学生不足2条,会自动显示所有有效记录(比如只有1条就显示1条);
  • 如果所有学生成绩都是0,可在xsl:for-each后添加提示文本,比如:
    <xsl:if test="count(students/student[score != 0]) = 0">
      <tr><td colspan="2">无有效成绩记录</td></tr>
    </xsl:if>
    

内容的提问来源于stack exchange,提问作者C123D

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 03:55:13