недопустимое исключение аргумента в XPath - PullRequest
1 голос
/ 25 ноября 2011

Всякий раз, когда я запускаю приведенный ниже код, он выдает мне исключение Illegalargument, если он находит слово, но если нет совпадений, он будет идти до конца без ошибок. Кто-нибудь может мне помочь найти решение?

public static void main(String[] args) throws MalformedURLException, SAXNotRecognizedException, SAXNotSupportedException, ParserConfigurationException, IOException, SAXException, XPathExpressionException {

   Parser p = new Parser();
   SAX2DOM sax2dom = null;
   org.w3c.dom.Node doc  = null;

   URL url = new URL("http://stackoverflow.com/users/1042952/mostafa");

   p.setFeature(Parser.namespacesFeature, false);
   p.setFeature(Parser.namespacePrefixesFeature, false);
   sax2dom = new SAX2DOM();
   p.setContentHandler(sax2dom);
   p.parse(new InputSource(new InputStreamReader(url.openStream())));
   doc = sax2dom.getDOM();

   final String term = "mostafa";
   String expression = "//*[contains(text(),$term)]";
   final QName termVariableName = new QName("term");
   class TermResolver implements XPathVariableResolver {
      @Override
      public Object resolveVariable(QName variableName) {
         return termVariableName.equals(variableName) ? term : null;
      }
   }
   javax.xml.xpath.XPath xpath = XPathFactory.newInstance().newXPath();
   xpath.setXPathVariableResolver(new TermResolver());
   Node node = (Node) xpath.evaluate(expression, p, termVariableName);
   System.out.println("her is it"+node);
}

1 Ответ

0 голосов
/ 26 ноября 2011

1) Ваша немедленная ошибка вызвана неверным типом результата, переданным evaluate. От документов :

Если returnType не является одним из типов, определенных в XPathConstants ( NUMBER, STRING, BOOLEAN, NODE или NODESET), затем IllegalArgumentException выдается.

2) Второй аргумент evaluate должен быть узлом контекста, а не анализатором.

Используйте что-то вроде этого:

Node node = (Node) xpath.evaluate(expression, doc, XPathConstants.NODE);

Примечание: Вы, вероятно, хотели использовать заглавные буквы Mostafa.

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