前缀xpathexpression节点列表的每个成员

时间:2013-03-06 17:53:28

标签: java xml xpath

我想构造一个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

有没有人知道评估友好的替代方案?

提前谢谢

1 个答案:

答案 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并将预期类型更改为字符串,但是您需要处理一个长字符串。