我有一些XML列表,嵌套在多个级别(列表,子列表,子子列表等)。我需要一种方法来确定(使用XPath 1.0)列表中每个级别组合在一起的最大数量的元素。
例如,如果我有以下内容:
<list>
<list-item><p>List item 1</p></list-item>
<list-item><p>List item 2</p>
<list>
<list-item><p>Sub-list item 1</p></list-item>
<list-item><p>Sub-list item 2</p></list-item>
</list>
</list-item>
<list-item><p>List item 3</p>
<list>
<list-item><p>Sub-list item 1</p>
<list>
<list-item><p>Sub-sub-list item 1</p></list-item>
</list>
</list-item>
<list-item><p>Sub-list item 2</p>
<list>
<list-item><p>Sub-sub-list item 1</p></list-item>
<list-item><p>Sub-sub-list item 2</p></list-item>
</list>
</list-item>
<list-item><p>Sub-list item 3</p>
<list>
<list-item><p>Sub-sub-list item 1</p></list-item>
<list-item><p>Sub-sub-list item 2</p></list-item>
<list-item><p>Sub-sub-list item 3</p></list-item>
</list>
</list-item>
</list>
</list-item>
<list-item><p>List item 4</p></list-item>
</list>
在此我需要确定每个级别的最大数量的分组元素。所以在上面的例子中我会找到:
我希望这是有道理的。
我正在使用可以使用XPath 1.0的排版包。不幸的是,它没有做到2.0。
谢谢!
答案 0 :(得分:0)
我不认为您可以在XPath 1.0中执行此操作,如果每个级别发送一个查询也不行。
您必须找到给定级别的所有列表(这很简单://list[count(ancestor-or-self::list) = $level]
),然后将其计数与该级别上彼此列表的计数进行比较。这需要将count(...)
应用于每个列表,这在XPath 1.0中是不可能的。允许执行此操作的 XPath 2.0 查询类似于
//list[
count(ancestor-or-self::list) = $level and
not(count(list-item) < //list[count(ancestor-or-self::list) = $level]/count(list-item))
]
最后一个“轴步”./count(list-item))
是你在XPath 1.0中无法做到的。
您可以获取给定级别的所有列表并搜索最大的XPath外部。