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

如何编写XSL条件语句过滤XML公园数据并按规则应用模板

问题原因

你的原XSL存在两个核心错误:

  • 模板匹配规则不匹配:你通过<xsl:apply-templates select="parks/park">选中了所有公园节点,但你写的模板是匹配iceskating节点,两者没有对应关系,判断逻辑根本不会被触发。
  • 上下文节点错误:如果模板上下文是iceskating节点,你直接调用park_name、acres是取不到对应值的,这两个节点和iceskating是同级节点,都属于park的子元素。

修正后的完整XSL代码

<?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" version="1.0" encoding="UTF-8" indent="yes" />

    <xsl:template match="/">
        <results>
            <iceskating_parks>
                <!-- 你也可以直接在select里加过滤条件,省略模板内的if判断:select="parks/park[iceskating > 0]" -->
                <xsl:apply-templates select="parks/park">
                    <xsl:sort select="park_name" order="ascending" />
                </xsl:apply-templates>
            </iceskating_parks>
        </results>
    </xsl:template>

    <!-- 调整模板匹配为park节点,匹配apply-templates选中的节点 -->
    <xsl:template match="park" >
        <xsl:if test="iceskating > 0">
            <park name="{park_name}" acres="{acres}" />
        </xsl:if>
    </xsl:template>
</xsl:stylesheet>

这里也简化了根节点下的元素写法,直接写节点名比用<xsl:element>更简洁易读,效果完全一致。

转换后输出结果

<?xml version="1.0" encoding="UTF-8"?>
<results>
  <iceskating_parks>
    <park name="CORNELL (PAUL) SQUARE" acres="8.8"/>
    <park name="FULLER (MELVILLE)" acres="11.31"/>
    <park name="RUSSELL (MARTIN) SQUARE" acres="10.05"/>
  </iceskating_parks>
</results>

完全符合你要求的格式,且已经按公园名称升序排序,只保留了可滑冰的公园。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 21:27:01