2013-03-06 6 views
0

Я хотел бы построить запрос xpath таким образом, что xpathexpression .evulate возвращает список значений с префиксом произвольной строки.Префикс каждого члена узлового элемента xpathexpression

Достижение этого с помощью одного результата является простым concat('PREFIX:',/returns/one/node), хотя действительный запрос xpath /returns/many/nodes/concat('PREFIX:',text()) не принимается xpathexpression .evulate.

Вот мой вызов функции:

NodeList resultNodes = (NodeList) expr.evaluate(doc, XPathConstants.NODESET); String collectionIDs[] = new String[resultNodes.getLength()];

Это ошибка я получаю:

javax.xml.transform.TransformerException: Unknown nodetype: concat

Кто-нибудь знает из оценки людей альтернативы?

Спасибо заранее

ответ

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() возвращает строковый тип, который не будет работать либо, так что у вас есть пара вариантов:

You вам нужно будет указать xpath из /returns/many/nodes в evaluate(), а затем установить индекс 0 вашего String[] с помощью «PREFIX:» перед заполнением его результатами XPath.

Или

Вы можете оценить concat('PREFIX:',/returns/one/node) и изменить XPath ожидаемый тип в строку, но тогда у вас есть одна длинная строка, чтобы иметь дело с.