我有一些无效的xpath表达式,其中第二个参数不是字符串:
//ng-messages/span[contains(., fieldName)]
这个表达式仍然会返回一些span。我很好奇xpath如何处理这个无效的第二个参数。
答案 0 :(得分:2)
表达式span[contains(., fieldName)]
中的谓词检查当前span
元素是否包含string(fieldName)
的值,其中fieldName
是span
的子项。
如果true
存在任何内容,则谓词将评估为fieldName
,因为fieldName
是span
的一部分。当true
没有子span
时,它也会评估为fieldName
,因为string(fieldName)
将返回一个空字符串,表达式contains('whatever', '')
为总是评估为真。
答案 1 :(得分:1)
请参阅XPath 1.0, §3.2 Function Calls:
使用FunctionName来识别FunctionCall表达式,以识别表达式评估上下文函数库中的函数,评估每个参数,将每个参数转换为函数所需的类型,最后调用该函数,将转换后的参数传递给它。
通过调用
string
函数将参数转换为类型字符串。(...)
contains()
的定义如下:
功能:布尔包含(字符串,字符串)
如果第一个参数字符串包含第二个参数字符串,则contains函数返回true,否则返回false。
最后,string()
函数根据输入定义了所有情况:node-set,number,boolean。如果是别的话:
除了四种基本类型之外的类型的对象将以依赖于该类型的方式转换为字符串。
乍一看,我不知道您的XPath引擎将如何转换fieldName
。