XPath中的非法参数异常

问题描述:

每当我运行下面的代码时,如果它找到该单词,它会给我一个Illegalargument异常,但如果不匹配,它将一直持续到没有错误结束。任何人都可以帮助我找出解决方案吗?XPath中的非法参数异常

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://*.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)您即时错误是由于传递给evaluate非法结果类型。从the docs

如果returnType不是XPathConstants中定义的类型( NUMBER,字符串,布尔,NODE或NODESET)那么 则抛出之一。

2)evaluate的第二个参数应该是上下文节点,而不是解析器。

使用这样的事情:

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

注:你可能意味着资本Mostafa

+0

这是什么意思? **注意:您可能打算利用Mostafa。** – lonesome

+0

@ user1064929 - 搜索字符串区分大小写。 –

+0

哦,我明白了,无论如何要让它不区分大小写? – lonesome