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

如何通过XSLT转换过滤输入文件中多余的<li>标签

问题原因

你遇到的多余<li>标签,根源有两个:

  1. XSLT默认模板的自动输出:输入里xhtml:ol[@property='ktp:questionSet']下的三个原生<li>(ktp-question-set-meta、ktp-stimulus、ktp-question)没有被你的自定义模板匹配,被默认模板直接输出到结果里。
  2. 全局路径的匹配冗余:你用了大量//开头的绝对路径,会匹配整个文档内的对应节点,容易导致重复输出内容。

解决方案

1. 拦截原生多余<li>

添加一个空模板,直接阻止输入中不需要的<li>元素被输出:

<xsl:template match="xhtml:li[@class='ktp-question-set-meta' or @class='ktp-stimulus' or @class='ktp-question']" />

2. 替换全局路径为相对路径

把模板中所有//开头的select路径,改成基于当前匹配的ol节点的相对路径,确保只取当前问题集下的内容,避免全局匹配的冗余。

修改后的完整模板:

<xsl:template match="xhtml:ol[@property = 'ktp:questionSet']">
    <xsl:param name="path"/>
    <xsl:variable name="content-item-name"
        select=".//xhtml:span[@property = 'atom:content-item-name']/@data-value"/>

    <li class="ktp-question" property="ktp:question" typeof="ktp:Question">
        <section class="ktp-question-set-meta">
            <xsl:apply-templates
                select="./xhtml:li[@class='ktp-question']/xhtml:section[@class='ktp-question-meta']/xhtml:section[@class='ktp-meta' and not(@property = 'ktp:questionSetType')][position() = 3 or position() = 4]"/>
        </section>
        <section property="ktp:stimulus" typeof="ktp:Stimulus" class="ktp-stimulus">
            <xsl:apply-templates
                select="xhtml:li[@class = 'ktp-stimulus']/node()"/>
        </section>
        <section class="ktp-question-stem">
            <xsl:apply-templates
                select="./xhtml:li[@class='ktp-question']/xhtml:section[@class='ktp-question-stem']/node()"/>
        </section>
        <ol class="ktp-answer-set">
            <xsl:apply-templates
                select="./xhtml:li[@class='ktp-question']/xhtml:ol[@class='ktp-answer-set']/node()"/>
        </ol>
        <section property="ktp:explanation" typeof="ktp:Explanation"
            class="ktp-explanation">
            <xsl:apply-templates
                select="./xhtml:li[@class='ktp-question']/xhtml:section[@class='ktp-explanation']/node()"/>
        </section>
    </li>
</xsl:template>

<!-- 拦截原生多余li -->
<xsl:template match="xhtml:li[@class='ktp-question-set-meta' or @class='ktp-stimulus' or @class='ktp-question']" />

关键修改说明

  • 用./开头的相对路径,限定只在当前匹配的ol节点下查找子元素,避免全局匹配导致的重复内容
  • 新增的空模板直接拦截输入中不需要的原生<li>,不让它们通过默认模板输出
  • 调整content-item-name的路径为.//,只在当前ol节点下查找,匹配更精准

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 21:15:53