2011-11-25 13 views
1

아래 코드를 실행할 때마다 단어를 발견하면 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://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); 
} 

답변

0

1) 귀하의 즉각적인 오류는 evaluate에 전달 불법 결과 유형이다.

returnType이는 다음 는 IllegalArgumentException가 슬로우됩니다 같이 XPathConstants에 정의 된 유형 ( 숫자, 문자열, 부울, NODE 또는 노드 집합) 중 하나가 아닌 경우 the docs에서.

2) evaluate의 두 번째 인수는 구문 분석기가 아니라 컨텍스트 노드 여야합니다. 이 같은

사용 무언가 :

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

참고 : 당신은 아마 Mostafa을 투자하는 것을 의미했다.

+0

이 의미는 무엇입니까? ** 참고 : 아마도 Mostafa를 대문자로 사용하려고했을 것입니다. ** – lonesome

+0

@ user1064929 - 검색 문자열은 대소 문자를 구분합니다. –

+0

아, 어쨌든 대소 문자를 구분하지 않습니까? – lonesome