我想构造一个xpath查询,使xpathexpression。evaulate返回一个前缀为任意字符串的值列表。
使用单个结果实现此操作非常简单concat('PREFIX:',/returns/one/node)
,但xpathexpression不接受有效的xpath查询/returns/many/nodes/concat('PREFIX:',text())
。
这是我的函数调用:
NodeList resultNodes = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);
String collectionIDs[] = new String[resultNodes.getLength()];
这是我收到的错误:
javax.xml.transform.TransformerException: Unknown nodetype: concat
有没有人知道评估友好的替代方案?
提前谢谢
答案 0 :(得分:1)
那是因为您的“有效xpath查询”无效。 concat()
是一个接受参数的函数,这就是为什么你的第一个xpath:concat('PREFIX:',/returns/one/node)
被正确使用并且有效的原因。
当你将它放在xpath的末尾时,就像你在这里所做的那样:/returns/many/nodes/concat('PREFIX:',text())
它试图找到一个名为“concat”的节点类型,它不存在,因而是你收到的错误。
expr.evaluate()
将评估您的concat('PREFIX:',/returns/one/node)
作为参数,但因为它期望返回类型的节点列表,而concat()
返回一个字符串类型,这也不起作用,所以你有几个选择:
您必须将/returns/many/nodes
的xpath提供给evaluate()
,然后在填充XPath结果之前将String[]
的索引0设置为“PREFIX:”。
或者
您可以评估concat('PREFIX:',/returns/one/node)
xpath并将预期类型更改为字符串,但是您需要处理一个长字符串。