0

我有以下 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 可以看作是一个嵌套列表。

编号的默认格式是“1.1.1”,level="multiple"。但如果列表嵌套第 4 次或更多次,则格式应更改为 '1',level="single"。

上述结构的期望输出将是:

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

在我看来,例如,如果我的当前节点是第一个节点,我需要计算我的当前节点和父节点之间有多少祖先。如果计算出的数字小于 4,则使用“1.1.1”作为列表项格式,否则使用“1”作为格式。

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

这是否可以通过一个简单的 xpath 表达式来实现,或者我是否尝试使用从 current() 开始的递归模板来计算数字,如果需要,则查找每个下一个祖先,如果不是,则在数字上加一并继续下一个祖先?

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

提前致谢。

BRgrds,延斯

4

1 回答 1

1

如果您知道获取一个节点的所有祖先的数量,那么只需减去祖先的数量someSubNodeInXmlFile,您就会得到中间节点的数量(加一)。

R---o---o---X---o---o---o---o---o---N
            3                       9
            \_______________________/
                  9 - 3 - 1 = 5
于 2016-02-23T15:06:12.470 回答