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

XSL转换XML文件时属性无值及排序功能异常问题咨询

问题原因

  • 模板匹配规则不匹配:你通过<xsl:apply-templates select="parks/park"/>选中了park节点,但写的模板只匹配park_name节点,导致park节点触发XSLT内置默认模板:递归处理所有子节点、自动输出文本节点内容,这就是多余的面积数值出现的原因。
  • 节点上下文错误:触发park_name匹配模板时,当前上下文是park_name元素本身,你在模板内写的select="park_name"和select="acres"都是从park_name节点下查找子元素,原XML中park_name没有这两个子元素,所以属性取值为空。
  • 排序规则错误:你写的排序依据是@name,但原XML的park节点没有name属性,实际排序需要取park下的park_name子元素值。

修正方案

直接修改XSLT文件内容如下即可得到符合要求的输出:

<?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>
            <names>
                <xsl:apply-templates select="parks/park">
                    <!-- 排序依据改为park下的park_name子元素值 -->
                    <xsl:sort select="park_name" order="ascending" />
                </xsl:apply-templates>
            </names>
        </results>
    </xsl:template>
    <!-- 模板改为匹配park节点,上下文直接为park元素 -->
    <xsl:template match="park">
        <park name="{park_name}" acres="{acres}"/>
    </xsl:template>
</xsl:stylesheet>

这里用了属性值模板{}的写法简化代码,和你原来写xsl:attribute的效果完全一致。

内容的提问来源于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 20:24:05