2016-11-21 4 views
-2

XML 문자열에서 속성 이름과 값을 읽는 코드를 작성하고 있지만 내 노드는 예 : hi : collection으로 표시되므로 컴파일러가 URL로 가져 와서 던지고 있습니다. 오류 접두사 찾을 수 없습니다 URL : 안녕하세요VTD-XML을 사용하여 속성 이름 및 값 가져 오기

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 

import java.net.HttpURLConnection; 
import java.net.URL; 


    import javax.xml.parsers.ParserConfigurationException; 
    import javax.xml.xpath.XPathExpressionException; 

    import com.ximpleware.*; 

    import org.xml.sax.SAXException; 
public class A20 { 

public static void main(String[] args) throws IOException, XPathExpressionException, ParserConfigurationException, SAXException, XPathParseException, XPathEvalException, NavException{ 

    URL a=new URL("URL"); 
    HttpURLConnection b=(HttpURLConnection) a.openConnection(); 
    b.setRequestMethod("GET"); 
    b.setRequestProperty("Accept", "application/xml"); 
BufferedReader c=new BufferedReader(new InputStreamReader(b.getInputStream())); 
StringBuilder sb=new StringBuilder(); 

String out,out1 = null; 
while((out=c.readLine())!=null) 
{sb.append(out); 
out1=sb.toString(); 
    System.out.println(out1); } 
    c.close(); 
    b.disconnect(); 

    byte[] bytes = out1.getBytes("UTF-8"); 
    VTDGen vg = new VTDGen(); 
    vg.setDoc(bytes); 
VTDNav vn = vg.getNav(); 
AutoPilot ap = new AutoPilot(vn); 

ap.selectXPath("//hi:collection/@name");// I am getting error here 
int i=0; 
while((i=ap.evalXPath())!=-1){ 
    System.out.println(" item name is ===>"+vn.toString(i+1)); 
} 
} 

은}

답변

0

당신이 오류가 발생하는 이유는 선언하지 않았기 때문이다이 경우 안녕하세요, 접두사 사이의 바인딩, 그 해당 URL은 필수이며 필수적입니다.

해결 방법은 selectXPath 전에 AutoPilot의 declareNamespaceURL() 메서드를 호출하는 것입니다.

또 다른 제안 : VTDGen의 parseHTTPURL 메서드를 사용하여 URL 주소에서 직접 읽을 수 있으므로 URL 처리 노력을 절약 할 수 있습니다.