Java 使用VTD-XML获取属性名称和值

Java 使用VTD-XML获取属性名称和值,java,vtd-xml,Java,Vtd Xml,我正在编写从XML字符串读取属性名称和值的代码,但我的节点表示为例如hi:collection,因此编译器将其作为URL,并抛出错误未找到前缀为:hi的URL import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import javax.xm

我正在编写从XML字符串读取属性名称和值的代码,但我的节点表示为例如hi:collection,因此编译器将其作为URL,并抛出错误未找到前缀为:hi的URL

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)); 
}
}

}

出现该错误的原因是,您没有声明前缀hi(在本例中)与其相应URL之间的绑定,这是必需的,也是必不可少的

修复方法是在选择XPath之前调用AutoPilot的
declareNamespaceURL()
方法

另一个建议:您可以使用VTDGen的parseHTTPURL方法直接读取URL地址。。。这样就省去了URL处理的工作量