2015-12-02 74 views
0

无效的第二个参数我有一种无效的XPath表达式,其中第二个参数是不是字符串:的XPath:在处理包含()函数

//ng-messages/span[contains(., fieldName)] 

这个表达式仍然会返回一些跨度年代。我很好奇xpath如何处理这个无效的第二个参数。

回答

2

在表达的谓词如果span[contains(., fieldName)]检查当前span元素包含的string(fieldName)的值,其中fieldNamespan的孩子。

谓词将计算为true如果fieldName存在任何内容,因为fieldNamespan的一部分。当span没有孩子fieldName时,它也计算为true,因为string(fieldName)将返回一个空字符串,并且表达式contains('whatever', '')总是计算为true。

+0

不错,并重点! –

1

参见XPath 1.0, §3.2 Function Calls

甲FunctionCall表达是通过使用FunctionName以识别表情评估上下文功能库中的函数,评估各参数的,每个参数转换成由所要求的类型评价函数,最后调用该函数,并将其转换为参数。

将参数转换为类型字符串,就像调用string函数一样。(...)

contains()的定义是这样的:

功能:布尔包含(字符串,字符串)

的包含,如果第一个参数字符串包含函数返回true第二个参数字符串,否则返回false。

最后,string()函数根据输入定义了所有的情况:node-set,number,boolean。如果是别的:

除四种基本类型以外的类型的对象被转换为依赖于该类型的字符串。

乍一看,我不知道XPath引擎如何转换fieldName