首页 > 解决方案 > 获取节点级别

问题描述

我想<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。

谢谢

标签: xslt

解决方案


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

<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 。


推荐阅读