2011-05-25 140 views
2

我正在編輯我的問題,以清楚地瞭解有關字符串名稱resfile_name和結果 我想要做xml parsing.where我傳遞一些參數到url ane它使我以xml格式響應我現在我想要解析該字符串(xml數據)。 我使用的follwing以下代碼: -xml解析+ Java ME

 SAXParserFactory factory = SAXParserFactory.newInstance(); 
      SAXParser saxParser = factory.newSAXParser(); 
      vector = new Vector(); 
      vector.addElement(new KeyPair("ParentID", "10000186")); 
      String result = Constants.callSoap("GetChildList", vector); 
      InputStream is = new ByteArrayInputStream(result.getBytes("UTF-8")); 
Reader reader = new InputStreamReader(in); 
    XmlParser parser = new XmlParser(reader); 
    ParseEvent pe = null; 
    Reader reader = new InputStreamReader(in); 
    XmlParser parser = new XmlParser(reader); 
    ParseEvent pe = null; 
    parser.skip(); 
    parser.read(Xml.START_TAG, null, "GetChildListResult"); 
    parser.skip(); 
    parser.read(Xml.START_TAG, null, "CustomChildList"); 

    boolean trucking = true; 
    boolean first = true; 
    while (trucking) { 
     pe = parser.read(); 
     if (pe.getType() == Xml.START_TAG) { 
     String name = pe.getName(); 
      System.out.println("nAME=="+name); 
     if (name.equals("ChildID")) { 
      String title, link, description; 
      title = link = description = null; 
      while ((pe.getType() != Xml.END_TAG) || 
       (pe.getName().equals(name) == false)) { 
      pe = parser.read(); 
      if (pe.getType() == Xml.START_TAG && 
       pe.getName().equals("ChildName")) { 
       pe = parser.read(); 
       title = pe.getText(); 
      } 
      else if (pe.getType() == Xml.START_TAG && 
       pe.getName().equals("IMEINumber")) { 
       pe = parser.read(); 
       link = pe.getText(); 
      } 
      else if (pe.getType() == Xml.START_TAG && 
       pe.getName().equals("ChildStatus")) { 
       pe = parser.read(); 
       description = pe.getText(); 
      } 
      } 

     } 
     else { 
      while ((pe.getType() != Xml.END_TAG) || 
       (pe.getName().equals(name) == false)) 
      pe = parser.read(); 
     } 
     } 
     if (pe.getType() == Xml.END_TAG && 
      pe.getName().equals("GetChildListResult")) 
     trucking = false; 
    } 

的Constants.callSoap( 「GetChildList」,向量);調用callsoap方法中的常數具有代碼: -

public static String callSoap(String method, Vector vector) { 
     String result = null; 
     Constants.log("callSoap"); 
     try { 
      SoapObject request = new SoapObject(NAMESPACE, method); 
      if (vector != null) { 
       for (int i = 0; i < vector.size(); i++) { 
        KeyPair keyPair = (KeyPair) vector.elementAt(i); 
        request.addProperty(keyPair.getKey(), keyPair.getValue()); 
       } 
      } 
      Constants.log("callSoap2"); 
      Element[] header = new Element[1]; 
      header[0] = new Element().createElement(NAMESPACE, "AuthSoapHd"); 
      Element username = new Element().createElement(NAMESPACE, "strUserName"); 
      username.addChild(Node.TEXT, "*****"); 
      header[0].addChild(Node.ELEMENT, username); 
      Element password = new Element().createElement(NAMESPACE, "strPassword"); 
      password.addChild(Node.TEXT, "******"); 
      header[0].addChild(Node.ELEMENT, password); 
      SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
      envelope.dotNet = true; 
      envelope.headerOut = header; 
      envelope.setOutputSoapObject(request); 
      Constants.log("callSoap3");   
    HttpTransport transport = new HttpTransport("http://***.***.*.***/ChildTrackerService/ChildTrackerService.asmx?wsdl"); 
      //log("Log:transport"); 
      transport.setXmlVersionTag("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); 
      //log("Log:transport1"); 
      try { 
       transport.call("http://tempuri.org/" + method, envelope); 
       //log("Log:transport:call");     
       result = (envelope.getResponse()).toString(); 


      } catch (Exception e) { 
       System.out.println("exception of IP==" + e); 
      } 
     } catch (Exception e) { 
      log("Exception CallSoap:" + e.toString()); 
     } 
     return result; 
    } 

And the class keypair contain:- 

public KeyPair(String key, String value) { 
     this.key = key; 
     this.value = value; 
    } 



    public String getKey() { 
     return key; 
    } 

    public String getValue() { 
     return value; 
    } 




The string reult has -- 
result==anyType{CustomChildList=anyType{ChildID=452; ChildName=Local; IMEINumber=958694; ChildStatus=Free; ExpiryDate=2011-05-26T16:22:21.29; RemainigDays=1; SOS=1; }; CustomChildList=anyType{ChildID=502; ChildName=testing; IMEINumber=123456; ChildStatus=anyType{}; ExpiryDate=null; RemainigDays=0; SOS=1; }; CustomChildList=anyType{ChildID=523; ChildName=abc; IMEINumber=124124; ChildStatus=anyType{}; ExpiryDate=null; RemainigDays=0; SOS=1; }; } 

實際的反應是這樣的: -

本地免費 2011-05-26T16 :22:21.29 測試 ABC

+0

什麼是'resfile_name'?你的項目的目錄結構是什麼? – 2011-05-25 09:15:09

+0

resfile_name是有響應數據的字符串 – 2011-05-25 09:18:42

回答

2

下面的代碼將尋找資源類路徑中的參數傳遞的名稱和要傳遞整個XML,所以NPE是顯而易見的。

this.getClass().getResourceAsStream(resfile_name) 

你最好從URL InputStream中,如下圖所示碎段,然後繼續前進

HttpConnection hc = null; 

     try { 
      hc = (HttpConnection)Connector.open(url); 
      parse(hc.openInputStream()); 

+0

非常感謝我的問題解決 – 2011-05-26 05:42:33

+0

很高興知道:) – 2011-05-26 05:48:50