2011-03-08 19 views
1

我需要采取所有"//ul/li[not(@*)][count(*)=0]",但那些具有<div>父项的除外。我试过"//not(div)/ul/li[not(@*)][count(*)=0]",但不幸的是它不起作用。 有谁知道,我该如何处理? 在此先感谢。Xpath:基于父值的查询中的例外

+0

问得好,+1。请参阅我的答案,以获取选择所需节点的最短XPath表达式。 :) – 2011-03-09 05:40:01

回答

2

我想你需要:

//ul[not(parent::div)]/li[not(@*|*)] 

或者:

/descendant-or-self::node()[not(self:div)]/ul/li[not(@*|*)] 

两个选择这样ul时,它的根元素,也。

+0

是的,那正是我要找的。 – 2011-03-08 22:57:52

+0

对于正确的答案+1。 – Flack 2011-03-09 05:37:29

1

使用

//*[not(self::div)]/li[not(@*) and not(*)] 

可略有删节等效:

//*[not(self::div)]/li[not(@*|*)] 
+0

+1简洁。 – Flack 2011-03-09 05:38:30

+0

不幸的是, 1)它有一个parcing错误 - 我认为这是因为错过了: 而不是 '// * [not(self :: div)]/li [not(@ *)and not(*)] ' 但是 '// * [not(self :: div)]/li [not(@ *)and not(*)]' 2)用那个正确的表达式我有一个不想要的结果 – 2011-03-10 18:51:46

+0

@CodeJunkie:感谢您的好消息 - 我更正了两个表达式,现在它们在语法上是正确的。至于得到一个不想要的结果,请您提供可以证明这一点的最简单的XML文档(通过编辑您的问题)?也许你错误地要求了你的要求,或者错过了一个额外的要求 – 2011-03-10 20:50:59