java - Evaluating XPath an XmlResourceParser causes Exception -


i have , xml-file in resources looks (removed other stage-elemets):

<?xml version="1.0" encoding="utf-8"?> <schedule name="irgend ein besondere zuchtname">     <stages>         <stage interval="0" token="3">             <name>name</name>             <descrition>some description...</descrition>             <image>image_to_retrieve.jpg</image>         </stage>     </stages> </schedule> 

i want text of image-element specific stage (by token). approach this:

public string getimage(int stagetoken) {      // because helper class, context set in constructor     xmlresourceparser parser = context.getresources().getxml(r.xml.schedule_default);     xpath xpath = xpathfactory.newinstance().newxpath();      string image;      try {         // error occurs here:         image = xpath.evaluate("//stage[@token=3]/image/text()", parser);     } catch (xpathexpressionexception e) {         log.e(log_tag, "error evaluating xpath expression.");         e.printstacktrace();         return null;     }      parser.close();     return image; } 

the expression shouldn't problem, because tested other xpath-programms. same validity of xml. exception get:

01-17 00:12:05.044 30417-30417/at.beekeeper w/system.err: javax.xml.xpath.xpathexpressionexception: javax.xml.transform.transformerexception: attempt invoke interface method 'org.apache.xml.dtm.dtmaxistraverser org.apache.xml.dtm.dtm.getaxistraverser(int)' on null object reference 01-17 00:12:05.045 30417-30417/at.beekeeper w/system.err:     @ org.apache.xpath.jaxp.xpathimpl.evaluate(xpathimpl.java:295) 01-17 00:12:05.045 30417-30417/at.beekeeper w/system.err:     @ org.apache.xpath.jaxp.xpathimpl.evaluate(xpathimpl.java:371) 01-17 00:12:05.045 30417-30417/at.beekeeper w/system.err:     @ at.beekeeper.util.scheduleparser.getimage(scheduleparser.java:108) 01-17 00:12:05.045 30417-30417/at.beekeeper w/system.err:     @ at.beekeeper.view.stageactivity.oncreate(stageactivity.java:52) 01-17 00:12:05.045 30417-30417/at.beekeeper w/system.err:     @ android.app.activity.performcreate(activity.java:5953) 01-17 00:12:05.045 30417-30417/at.beekeeper w/system.err:     @ android.app.instrumentation.callactivityoncreate(instrumentation.java:1128) 01-17 00:12:05.046 30417-30417/at.beekeeper w/system.err:     @ android.app.activitythread.performlaunchactivity(activitythread.java:2267) 01-17 00:12:05.046 30417-30417/at.beekeeper w/system.err:     @ android.app.activitythread.handlelaunchactivity(activitythread.java:2388) 01-17 00:12:05.046 30417-30417/at.beekeeper w/system.err:     @ android.app.activitythread.access$800(activitythread.java:148) 01-17 00:12:05.046 30417-30417/at.beekeeper w/system.err:     @ android.app.activitythread$h.handlemessage(activitythread.java:1292) 01-17 00:12:05.046 30417-30417/at.beekeeper w/system.err:     @ android.os.handler.dispatchmessage(handler.java:102) 01-17 00:12:05.046 30417-30417/at.beekeeper w/system.err:     @ android.os.looper.loop(looper.java:135) 01-17 00:12:05.046 30417-30417/at.beekeeper w/system.err:     @ android.app.activitythread.main(activitythread.java:5312) 01-17 00:12:05.046 30417-30417/at.beekeeper w/system.err:     @ java.lang.reflect.method.invoke(native method) 01-17 00:12:05.046 30417-30417/at.beekeeper w/system.err:     @ java.lang.reflect.method.invoke(method.java:372) 01-17 00:12:05.046 30417-30417/at.beekeeper w/system.err:     @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:901) 01-17 00:12:05.046 30417-30417/at.beekeeper w/system.err:     @ com.android.internal.os.zygoteinit.main(zygoteinit.java:696) 01-17 00:12:05.046 30417-30417/at.beekeeper w/system.err: caused by: javax.xml.transform.transformerexception: attempt invoke interface method 'org.apache.xml.dtm.dtmaxistraverser org.apache.xml.dtm.dtm.getaxistraverser(int)' on null object reference 01-17 00:12:05.046 30417-30417/at.beekeeper w/system.err:     @ org.apache.xpath.xpath.execute(xpath.java:365) 01-17 00:12:05.046 30417-30417/at.beekeeper w/system.err:     @ org.apache.xpath.jaxp.xpathimpl.eval(xpathimpl.java:219) 01-17 00:12:05.046 30417-30417/at.beekeeper w/system.err:     @ org.apache.xpath.jaxp.xpathimpl.evaluate(xpathimpl.java:281) 01-17 00:12:05.046 30417-30417/at.beekeeper w/system.err:   ... 16 more 01-17 00:12:05.046 30417-30417/at.beekeeper w/system.err: caused by: java.lang.nullpointerexception: attempt invoke interface method 'org.apache.xml.dtm.dtmaxistraverser org.apache.xml.dtm.dtm.getaxistraverser(int)' on null object reference 01-17 00:12:05.046 30417-30417/at.beekeeper w/system.err:     @ org.apache.xpath.axes.axeswalker.setroot(axeswalker.java:221) 01-17 00:12:05.046 30417-30417/at.beekeeper w/system.err:     @ org.apache.xpath.axes.walkingiterator.setroot(walkingiterator.java:157) 01-17 00:12:05.046 30417-30417/at.beekeeper w/system.err:     @ org.apache.xpath.axes.nodesequence.setroot(nodesequence.java:265) 01-17 00:12:05.046 30417-30417/at.beekeeper w/system.err:     @ org.apache.xpath.axes.locpathiterator.execute(locpathiterator.java:212) 01-17 00:12:05.046 30417-30417/at.beekeeper w/system.err:     @ org.apache.xpath.xpath.execute(xpath.java:337) 01-17 00:12:05.046 30417-30417/at.beekeeper w/system.err:   ... 18 more 

i found solution use xpath. need use inputsource , put xml-file /raw directory.

inputsource inputsource = new inputsource(context.getresources().openrawresource(r.raw.schedule_default)); xpath xpath = xpathfactory.newinstance().newxpath(); string image;         try {     image = xpath.evaluate("//stage[@token=3]/image/text()", inputsource); } catch (xpathexpressionexception e) {     log.e(log_tag, "error evaluating xpath expression.");     e.printstacktrace();     return null; } 

but i'm still not sure if possible use xmlpullparser xpath...


Comments

Popular posts from this blog

get url and add instance to a model with prefilled foreign key :django admin -

android - Keyboard hides my half of edit-text and button below it even in scroll view -

css - Make div keyboard-scrollable in jQuery Mobile? -