XSL:计算当前节点与另一个特定节点

时间:2016-02-23 14:57:53

标签: xml xslt xpath findancestor

我有以下XML结构:

<someSubNodeInXmlFile text="mainListStart">
    <a text="text1">
        <b text="text2">
            <a text="text3">
                <c text=""text4/>
            </a>
            <a text="text5"/>
        </b>
    </a>
    <a text="text6">
        <c text="text7"/>
    </a>
</someSubNodeInXmlFile>

我的问题是关于编号。 上面的XML可以看作是嵌套列表。

编号的默认格式为&#39; 1.1.1&#39;,level =&#34; multiple&#34;。 但如果列表第四次或更多嵌套,则格式应更改为&#39; 1&#39;,level =&#34; single&#34;。

上述结构的所需输出为:

1. mainListStart
    1.1 text1
        1.1.1 text2
            1   text3
                1   text4
            2   text5
    1.2 text6
        1.2.1 text7

在我看来,例如如果我的当前节点是第一个,我需要计算当前节点和父节点之间的祖先数量。 如果计算出的数字低于4,请使用&#39; 1.1.1&#39;作为列表项目格式,否则使用&#39; 1&#39;作为格式。

我现在尝试了几件事,但都没有奏效。我能够计算出当前节点的一般祖先数量,但这是计算完整的祖先树,而不是直到特定节点“someSubNodeInXmlFile&#39;”

这可能是使用简单的xpath表达式,还是尝试使用从current()开始的递归模板来计算数字,并查找每个下一个祖先(如果需要的话),如果需要,则添加一个不要继续前往下一个祖先?

我可以想象后一种想法不是很有效(如果它起作用的话)。但什么是最好的解决方案?

提前致谢。

BRgrds, 延

1 个答案:

答案 0 :(得分:1)

如果您知道hot以获取节点的所有祖先的数量,那么只需减去someSubNodeInXmlFile的祖先数量,并且您有两个节点的数量(加一)。

R---o---o---X---o---o---o---o---o---N
            3                       9
            \_______________________/
                  9 - 3 - 1 = 5