Java XMLPullParser在执行时引发错误

Java XMLPullParser在执行时引发错误,java,xmlpullparser,Java,Xmlpullparser,我尝试了一个使用XMLPullParser的简单示例,但它引发了一个异常 Exception in thread "main" org.xmlpull.v1.XmlPullParserException: could not load any factory class (even small or full default implementation); nested exception is: org.kxml2.io.XmlReader at org.xmlpull.v1.XmlPul

我尝试了一个使用XMLPullParser的简单示例,但它引发了一个异常

Exception in thread "main" org.xmlpull.v1.XmlPullParserException: could not load any factory class (even small or full default implementation); nested exception is: 
org.kxml2.io.XmlReader
at org.xmlpull.v1.XmlPullParserFactory.newInstance(XmlPullParserFactory.java:225)
at org.xmlpull.v1.XmlPullParserFactory.newInstance(XmlPullParserFactory.java:76)
at XMLParsing.main(XMLParsing.java:18)
我的代码是:

import java.io.IOException;
import java.io.StringReader;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;

public class XMLParsing {

    /**
     * @param args
     * @throws XmlPullParserException 
     * @throws IOException 
     */
    public static void main(String[] args) throws XmlPullParserException, IOException {

        XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
        factory.setNamespaceAware(true);
        XmlPullParser xpp = factory.newPullParser();

        xpp.setInput(new StringReader ("<foo>Hello World!</foo>"));
        int eventType = xpp.getEventType();
        while (eventType != XmlPullParser.END_DOCUMENT) {
         if(eventType == XmlPullParser.START_DOCUMENT) {
             System.out.println("Start document");
         } else if(eventType == XmlPullParser.END_DOCUMENT) {
             System.out.println("End document");
         } else if(eventType == XmlPullParser.START_TAG) {
             System.out.println("Start tag "+xpp.getName());
         } else if(eventType == XmlPullParser.END_TAG) {
             System.out.println("End tag "+xpp.getName());
         } else if(eventType == XmlPullParser.TEXT) {
             System.out.println("Text "+xpp.getText());
         }
         eventType = xpp.next();
        }

    }

}
import java.io.IOException;
导入java.io.StringReader;
导入org.xmlpull.v1.XmlPullParser;
导入org.xmlpull.v1.XmlPullParserException;
导入org.xmlpull.v1.XmlPullParserFactory;
公共类XML解析{
/**
*@param args
*@throws XmlPullParserException
*@抛出异常
*/
公共静态void main(字符串[]args)抛出XmlPullParserException,IOException{
XmlPullParserFactory工厂=XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser xpp=factory.newPullParser();
setInput(新的StringReader(“HelloWorld!”);
int eventType=xpp.getEventType();
while(eventType!=XmlPullParser.END_文档){
if(eventType==XmlPullParser.START\u文档){
System.out.println(“开始文档”);
}else if(eventType==XmlPullParser.END_文档){
系统输出打印项次(“结束文件”);
}else if(eventType==XmlPullParser.START_标记){
System.out.println(“开始标记”+xpp.getName());
}else if(eventType==XmlPullParser.END_标记){
System.out.println(“结束标记”+xpp.getName());
}else if(eventType==XmlPullParser.TEXT){
System.out.println(“Text”+xpp.getText());
}
eventType=xpp.next();
}
}
}

有人能说出问题出在哪里吗?

我认为异常是抛出的,因为您没有传递创建工厂所基于的类名。尝试使用其重写的方法
newInstance(java.lang.String factoryClassName)


您可以在这里找到有关使用工厂的更多信息:

jdk现在内置了一个xml拉式解析器。与其使用外部实现,我建议使用。