5

以下 xpath 似乎不起作用:

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

错误:表达式必须计算为节点集。

XML 片段

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

我知道 sum 函数将数字相加,字符串长度返回数字。

以下表达式可以正常工作:

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

任何帮助,将不胜感激。

4

2 回答 2

4

sum()函数需要一个 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] 
于 2011-10-19T21:33:17.597 回答
2

如果名称的数量可以变化(例如 Middle Initil、orefix、suffix 等),通常不可能使用单个 XPath 1.0 表达式获得所需的总和。

在 XPath 2.0 中这是可能的

//FullName[sum(*/stringlength()) ge 30]
于 2011-10-20T12:50:47.630 回答