Использование VTD-XML для получения имени и значения атрибута
Я пишу код для чтения имени и значения атрибута из строки XML, но мои узлы представлены, как, например, hi:collection, поэтому компилятор принимает его как URL и выдает ошибку. URL для префикса не найден: hi
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));
}
}
}
1 ответ
Причина, по которой вы получаете эту ошибку, заключается в том, что вы не объявили привязку между префиксом, в данном случае hi, и соответствующим URL-адресом, что является обязательным и необходимым.
Исправить это позвонить declareNamespaceURL()
метод автопилота перед selectXPath.
Еще одно предложение: вы можете использовать метод parseHTTPURL VTDGen для непосредственного чтения с URL-адреса... тем самым экономя ваше усилие на обработку URL-адреса...