2015-12-02 70 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