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

使用XSL的group-starting-with按h3对doc元素分组转换为wikicode

原代码问题诊断

  1. 分组选择器错误:select=".//result" 选中的是<result>根节点本身,而非它下面的<h3>、<doc>子节点,导致分组逻辑完全不生效。
  2. 取值逻辑错误:输出分组标题时直接取current()的全部内容,而没有明确取当前分组起始的<h3>节点的文本值。
  3. 内层循环取值错误:内层循环遍历当前分组节点时,当前节点本身就是<doc>,不需要再用./doc/去查找子元素,路径多写了一层。
  4. 额外注意:你提供的原始XML结尾的<result>没有闭合斜杠,需要改成</result>保证XML格式合法,否则解析器会直接报错。

可用的完整XSLT代码

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <!-- 配置输出为纯文本,避免自动插入多余标签、缩进 -->
    <xsl:output method="text" encoding="UTF-8" omit-xml-declaration="yes"/>

    <xsl:template match="/result">
        <!-- 对result下所有直接子节点,按h3作为分组起始点分组 -->
        <xsl:for-each-group select="*" group-starting-with="h3">
            <!-- 输出一级wikicode列表,取分组第一个节点(也就是h3)的文本 -->
            <xsl:text>*</xsl:text>
            <xsl:value-of select="current-group()[1]/text()"/>
            <xsl:text>&#10;</xsl:text> <!-- 显式换行 -->
            
            <!-- 筛选当前分组内的所有doc节点,输出二级列表 -->
            <xsl:for-each select="current-group()[self::doc]">
                <xsl:text>**</xsl:text>
                <xsl:value-of select="filename"/>
                <xsl:text> : </xsl:text>
                <xsl:value-of select="description"/>
                <xsl:text>&#10;</xsl:text> <!-- 显式换行 -->
            </xsl:for-each>
        </xsl:for-each-group>
    </xsl:template>
</xsl:stylesheet>

注:该代码依赖XSLT 2.0及以上版本支持,for-each-group是XSLT 2.0新增特性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 19:24:01