说我有这个XML:
<root>
<A></A>
<B></B>
<C>one</C>
<C>two</C>
<C>three</C>
<D></D>
</root>
现在我想得到所有节点,除了C节点'two'和'three'。 现在我想选择哪个C节点可以按索引保留。
所以这是我已经拥有的xpath:
//*[not(ancestor-or-self::C)]
但这会删除所有C节点,所以现在我必须添加一个索引到我想要保留的C节点
//*[not(ancestor-or-self::C)] exept for C[1]
如果我选择索引1:
,我怎样才能完成此操作以便输出<root>
<A></A>
<B></B>
<C>one</C>
<D></D>
</root>
或者,如果我选择索引2:
<root>
<A></A>
<B></B>
<C>two</C>
<D></D>
</root>
希望我足够清楚:p
THX
答案 0 :(得分:1)
我认为这取决于你定义为“索引”的内容。如果将“index”定义为具有n-1 C兄弟的C,那么您可以这样做:
显示第一个(之后删除所有
)/root/*[not(name() = 'C' and count(preceding::C) >= 1)]
仅显示第二个
/root/*[not(name() = 'C' and (count(preceding::C) < 1 or count(preceding::C) > 1))]
(我测试过这个:http://www.xmlme.com/XpathTool.aspx只是fyi)
答案 1 :(得分:1)
为什么除外?您有除之外的任何元素,然后添加其中一些元素:
//*[not(ancestor-or-self::C)]|//C[1]/descendant-or-self::*
答案 2 :(得分:0)
使用强>:
//*[not(self::c and not(count(preceding-sibling::c) = $ind - 1))]
其中$ ind是您要选择的c
元素的有用位置(从1开始)。