获取节点级别

时间:2019-09-06 10:12:15

标签: xslt

我想在输入中获得<li>的水平

输入:

<ol start="1" style="1">
        <li>
            <p type="List Number Level 1">Text 1.</p>
        </li>
        <li>
            <p type="List Number Level 1">Text 2</p>
            <ol start="1">
                <liFormat><iRef style="a"/>)<t/></liFormat>
                <li>
                    <p type="List Number Level 2">Text 3.</p>
                </li>
                <li>
                    <p type="List Number Level 2">Text 4.</p>
                </li>
            </ol>
        </li>
        <li>
            <p type="List Number Level 1">Text 5.</p>
        </li>
</ol>

输出应为:

<ol start="1" style="1">
        <li>
            <p type="List_1_First">Text 1.</p>
        </li>
        <li>
            <p type="List_1_First">Text 2</p>
            <ol start="1">
                <liFormat><liRef style="a"/>)<t/></liFormat>
                <li>
                    <p type="List_2_First">Text 3.</p>
                </li>
                <li>
                    <p type="List_2_First">Text 4.</p>
                </li>
            </ol>
        </li>
        <li>
            <p type="List_1_First">Text 5.</p>
        </li>
</ol>

尝试的代码:

<xsl:template match="ol[@start]/li[1]/p[contains(@type,'List')]" priority="30">
    <p type="List_{count(li)}_First">
        <xsl:apply-templates/>
    </p>
</xsl:template>

这里所有的事情都按照我的预期实现了。但是我必须采用li的级别。例如:List_{li level}_First。螺母,该标准杆不能正常工作。我已经提到了我尝试过的代码。我正在使用xslt 2.0。

谢谢

1 个答案:

答案 0 :(得分:1)

我认为您需要在这里计算祖先:

<tps:p type="List_{count(ancestor::tps:li)}_First">

也许XSLT中还有其他模板,但是当前模板仅与li下的第一个ol元素匹配。为了获得预期的输出,也许您需要这样做...

<xsl:template match="tps:ol[@start]/tps:li/tps:p[contains(@type,'List')]" priority="30">

有关示例,请参见http://xsltfiddle.liberty-development.net/gWEamKJ