1
在下面的示例中,我想确定具有XPath(2.0)表达式的节点的“嵌套级别”。这个“嵌套级别”将是连续后代的数量,例如,如果“跨度/ SPAN /跨度”的存在,这将是3,预计嵌套水平给出意见:如何确定XPath中的嵌套级别?
<?xml version="1.0" encoding="UTF-8"?>
<text>
<div>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget
dolor. Aenean massa.
<span><!--nesting level:2-->Cum sociis natoque penatibus et magnis dis parturient montes,
nascetur ridiculus mus.
<span><!--nesting levels:1-->Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem.
<span><!--nesting levels:0-->Nulla consequat massa quis enim.</span>
</span>
<span><!--nesting levels:0-->Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu.</span>
In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo.
</span>
<span><!--nesting levels:0-->Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus
elementum semper nisi.
</span>
<span><!--nesting levels:0-->Aenean vulputate eleifend tellus. Aenean leo ligula,
porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra
quis, feugiat a, tellus.
</span>
</div>
<div>Phasellus viverra nulla ut metus varius laoreet.
<span><!--nesting levels:0-->Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue.
</span>
<span><!--nesting levels:2-->Curabitur ullamcorper ultricies nisi.
<span><!--nesting levels:0-->Nam eget dui.</span>
Etiam rhoncus.
<span><!--nesting levels:1-->Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet
adipiscing sem neque sed ipsum.
<span><!--nesting levels:0-->Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem.</span>
<span><!--nesting levels:0-->Maecenas nec odio et ante tincidunt tempus.</span>
Donec vitae sapien ut libero venenatis faucibus.
<span><!--nesting levels:0-->Nullam quis ante.</span>
</span>
Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet
nibh.
</span>
Donec sodales sagittis magna.
</div>
</text>
现在,我试过count(descendant::span))
,但很明显,这也将包括任何兄弟姐妹,并产生一个错误导致很多情况。我也尝试count(descendant::span[1]))
和count(descendant::span[position() = 1]))
,这也给了erraneous结果。我还无法弄清楚如何从总数中排除兄弟姐妹的数量。任何暗示是赞赏。
非常感谢!这令人印象深刻。我没有想到解决方案会变得如此复杂。我将不得不在稍后检查 - 对于延迟抱歉! –
这可能给出给出的例子的正确答案,但它并不试图满足路径中的span元素必须连续的要求:它会报告“span/div/div/span/span'' –
为了解决这个问题,我认为你必须用'[祖先:: *中的每个$ a除了$ origin/ancestor :: *满足$ a/self :: span]的谓词来限定'descendant :: span'。 '$原点被绑定到最外层的上下文节点。 –