在XPath中使用not()

在XPath中使用not(),xpath,Xpath,我想知道如何正确使用XPath中的“not”。我似乎无法让它与属性一起工作 假设我有这样一个表达式:/*[@name='Bob']它是有效的,并且将返回名称属性等于'Bob'的所有节点 现在,如果我希望所有节点的name属性不等于'Bob',我需要使用XPath,例如:/*[@name not('Bob')],但这是无效的 我尝试过多种组合,但not()的排列顺序不同,但我似乎无法实现这一点。有人能告诉我如何正确使用not()吗 另外,当使用元素而不是属性时,顺序会改变吗?例如://name[t

我想知道如何正确使用XPath中的“not”。我似乎无法让它与属性一起工作

假设我有这样一个表达式:
/*[@name='Bob']
它是有效的,并且将返回名称属性等于'Bob'的所有节点

现在,如果我希望所有节点的name属性不等于'Bob',我需要使用XPath,例如:
/*[@name not('Bob')]
,但这是无效的

我尝试过多种组合,但not()的排列顺序不同,但我似乎无法实现这一点。有人能告诉我如何正确使用not()吗

另外,当使用元素而不是属性时,顺序会改变吗?例如:
//name[text()='Bob']

谢谢!:)

试试看

 //*[@name != 'Bob']

应该两者都能用。

根据:,你试过了吗

//*[@name and @name != 'Bob']
//*[@name != 'Bob']

这不是给出了所有元素是否有@name吗?我需要它是一个带有@name的元素,然后让它不等于'Bob',我想只要/*[@name!='Bob']就行了。。正如其他人所建议的那样。但该方法适用于数值,但不适用于字符串值//*[@numeric!=1]有效//*[@string!=“someString”]没有。只返回根元素!对不起,据我所知,您的解决方案确实有效。我认为我的XSL代码有一个问题,但它只有在我使用之后才变得明显!=。我做了一些进一步的测试,发现搜索没有经过整个层次结构。我发布了一个新问题,因为我仍然无法解决它@mathieu:我最好引用规范(而不是MS文档)“如果要比较的一个对象是一个节点集,另一个是一个字符串,那么当且仅当节点集中存在一个节点时,比较才会为真,这样对节点和另一个字符串的字符串值执行比较的结果为真。”@马修:这种方法适用于数值,但不适用于字符串值//*[@numeric!=1]有效//*[@string!=“someString”]没有。只返回根元素@亚历杭德罗:是的,但它只适用于数值,而不适用于上面提到的字符串值。对于字符串值,我得到的唯一结果是根节点。@iHeartGriek:这是有效的。其他顺序比较运算符(如)仅适用于数字(在XPath 2.0中,您可以使用与排序规则一起工作的
op:gt
。@Alejandro:我不知道会出现什么问题。。它在我的实现中不起作用。问题的可能来源是什么?此方法适用于数值,但不适用于字符串值//*[@numeric!=1]有效//*[@string!=“someString”]没有。只返回根元素!我很确定这对字符串有效。确定您没有犯错误,例如,错误案例?比较区分大小写。是的,我尝试了各种搜索。我只返回了根节点:请发布一个完整的示例,一个小的XML文件和您真正尝试的XPATH,然后我们将进一步了解。我认为我的XSL代码存在问题,但它只在我使用之后才变得明显!=。我做了一些进一步的测试,发现搜索没有经过整个层次结构。我发布了一个新问题,因为我仍然无法解决它。
//*[@name != 'Bob']