2011-10-19 55 views
5

嗨,大家好像下面的xpath似乎不起作用。Sum String - 使用Xpath的兩個不同節點的總長度 - 總結兩個節點的字符串長度

//FullName[sum(string-length(FirstName) | string-length(LastName))>= 30] 

錯誤:表達式必須計算爲節點集。

XML片斷

<FullName> 
<FirstName>somereallylongfirstnameguy</FirstName> 
<LastName>somereallylonglasttnameguyabcdefghijklmnopqrstuv</LastName> 
</FullName> 

我知道的和函數添加號碼一起,和字符串長度的回報數字。

下述公式正常工作:

//FullName[string-length(FirstName) >= 1] 

任何幫助,將不勝感激,謝謝!

回答

4

sum()函數expects a node-set,試圖提供string-length()調用,但失敗。 sum()在這裏似乎不是合適的功能。

您可以只直接加起來的長度在謂語:

//FullName[string-length(FirstName)+string-length(LastName) >= 30] 

或者可以使用串聯,然後再拿到長度:

//FullName[string-length(concat(FirstName,LastName)) >= 30] 

或者,如果你的片斷是代表對於所有FullName元素,只需考慮上下文節點的所有文本節點內容的長度,如下所示:

//FullName[string-length() >= 30] 
+0

最後建議只有當樣式表指定'工作的',否則長度也將包括空格。 –

+0

感謝您的信息!我很感激 – james31rock

2

如果名稱的數量可能有所不同(例如Middle Initil,orefix,suffix等等),通常不可能通過單個XPath 1.0表達式獲得想要的總和。

在XPath 2.0這是可能的

//FullName[sum(*/stringlength()) ge 30]