Динамическое возвращаемое значение XPathExpression - PullRequest
1 голос
/ 05 апреля 2011

Мне нужно вычислить выражение xpath, не зная заранее его возвращаемого значения.Меня не волнует различие между NodeSet и NodeSet, но меня интересует NodeSet вместо String или числа.

Например, xpath с функцией sum или concat можетвернуть число или строку (или логическое значение).Xpath с обычным путем xml возвращает набор узлов, возможно, только с одним узлом.

Как я могу вызвать функцию XPathExpression.evaluate() (javadoc здесь )?Я не знаю, что QName передать ему в качестве второго параметра.Класс XPathConstants содержит закрытый список разрешенных констант (это Node, NodeSet, String, Number и Boolean).

Можно ли указать значение «all» или «not care» изатем проверить возвращаемый объект на предмет его типа?

Я подумал, может быть, использовать перегруженную версию этой функции, которая всегда возвращает строку.Однако я не понимаю, как это будет работать, если выражение xpath предназначено для возврата набора узлов.

Ответы [ 2 ]

1 голос
/ 07 апреля 2011

Следуя подсказке Алехандро о DOM Level 3 XPath , я обнаружил, что Xalan 2.7.1 уже поддерживает его.

Я использовал класс XPathEvaluatorImpl Xalan.Это прекрасно работает, и я могу указать ANY-TYPE в качестве возвращаемого значения.Единственным недостатком является то, что эта функциональность не предоставляется в стандартном API Java, по крайней мере, в Java 6.

0 голосов
/ 05 апреля 2011

Re: получение String - если выражение ссылается на NodeSet, вы получаете его текстовое представление. Это может быть что-то вроде этого:

это что

читается как строка «thisthat» с или без пробелов в зависимости от конфигурации. Вы не узнаете, не попробовав.

Лично я предпочитаю Dom4J, потому что вы отвечаете за то, что получаете, используя такие методы, как booleanValueOf, numberValueOf, selectNodes, selectSingleNode. И код становится понятным: он говорит, что вы хотите получить, поэтому его легко понять.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...