2011-10-19 87 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]