使用 XSLT 转换防止不应该存在的 <li> 标签出现

问题描述 投票:0回答:1

我无法让我的 XSLT 脚本不提取原始输入文件中的

<li>
标签。请从我的输出中查看下面屏幕截图中的红色圆圈区域:

output file showing unwanted tag

我遇到问题的脚本部分如下:

<xsl:template match="xhtml:ol[@property = 'ktp:questionSet']">
    <xsl:param name="path"/>
    <xsl:variable name="content-item-name"
        select="//xhtml:section/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: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:section[@class = 'ktp-question-stem']/node()"/>
        </section>
        <ol class="ktp-answer-set">
            <xsl:apply-templates
                select="//xhtml:ol[contains(@class, 'ktp-answer-set')]/node()"/>
        </ol>
        <section property="ktp:explanation" typeof="ktp:Explanation"
            class="ktp-explanation">
            <xsl:apply-templates
                select="//xhtml:section[@class = 'ktp-explanation']/node()"/>
        </section>
    </li>
</xsl:template>

我正在工作的输入文件如下:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta charset="utf-8" />
        <link href="../../assets/css/main.css" rel="stylesheet" title="default" type="text/css" />
        <title>ptalme03</title>
    </head>
    <body>
        <ol class="ktp-question-set" >
            <li><ol property="ktp:questionSet" typeof="ktp:QuestionSet" class="ktp-question-set">
                    <li class="ktp-question-set-meta"><section property="ktp:metadata"
                            class="ktp-meta">
                            <span property="atom:content-item-name" class="ktp-meta"
                                data-value="ptalme03"></span>
                        </section><section property="ktp:tags" class="ktp-meta">
                            <span property="ktp:questionSetType" class="ktp-meta"
                                >shared-stimulus</span>
                        </section></li>
                    <li property="ktp:stimulus" typeof="ktp:Stimulus" class="ktp-stimulus"><p>
                            <img src="../../img/alpha_images_pt1/SAT_PT_math2_Q3.svg" />
                        </p></li>
                    <li property="ktp:question" typeof="ktp:Question" class="ktp-question">
                        <span property="atom:content-item-name" class="ktp-meta" data-value="ptalme03"></span>
                        <section class="ktp-question-meta">
                            <section class="ktp-meta" property="ktp:metadata">
                                <span class="ktp-meta" data-value="ptalme03"
                                    property="atom:content-item-name"></span>                               
                            </section>
                            <section class="ktp-meta" property="ktp:tags">
                                <span class="ktp-meta" property="ktp:interactionType"
                                    >single-select</span>
                                <span class="ktp-meta" property="OLD QID">ftm02.03</span>                               
                            </section>
                        </section><section class="ktp-question-stem">
                            <p>What is the <i>x</i>-intercept of the graph shown? </p>
                        </section><ol class="ktp-answer-set">
                            <li property="ktp:answer" typeof="ktp:AnswerCorrect">(−1, 0)</li>                           
                        </ol><section property="ktp:explanation" typeof="ktp:Explanation"
                            class="ktp-explanation">
                            <section class="ktp-explanation-section" data-title="Feedback"
                                data-uuid="e955d9441cc051f966008c9d6da75adc"
                                property="ktp:explanation-section" typeof="ktp:feedback">
                                <p><b>Getting to the Answer:</b> The <i>x</i>-intercept is the point
                                    where the graph crosses the <i>x</i>-axis. The graph crosses the
                                        <i>x</i>-axis at (−1, 0). <b>(A)</b> is correct. </p>
                            </section>
                        </section>
                    </li>
                </ol>
            </li>
        </ol>
    </body>
</html>
xslt
1个回答
0
投票

查看问题中包含的 XSLT 模板,它在输出中生成的唯一

li
元素是:

<li class="ktp-question" property="ktp:question" typeof="ktp:Question">
...
</li>

在您发布的输出图像中,上述元素是另一个没有属性的 <li> 元素的

子元素
。因此,您在图像中圈出的不需要的
<li>
元素不可能由您在问题中包含的模板生成。它是由您未包含的其他模板生成的。

几乎可以肯定,输出中的

<li>
<li>
的副本,它作为
<ol class="ktp-question-set" >
元素的子元素出现在输入文件中,并且也是被样式表忽略的元素的父元素:
<ol property="ktp:questionSet" typeof="ktp:QuestionSet" class="ktp-question-set">
。我猜测省略是由与
ol
匹配的模板引起的,并且在将模板应用于其子元素之前无法复制该元素,因此最终会得到一个
li
作为另一个
li
的子元素。如果您确实想删除
ol
,则还必须删除其父级
li

© www.soinside.com 2019 - 2024. All rights reserved.