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
。
这是什么意思? **注意:您可能打算利用Mostafa。** – lonesome
@ user1064929 - 搜索字符串区分大小写。 –
哦,我明白了,无论如何要让它不区分大小写? – lonesome