анализ XML + Java ME - PullRequest
       20

анализ XML + Java ME

2 голосов
/ 25 мая 2011

Я редактирую свой вопрос, чтобы получить четкое представление о названии строки resfile_name и результате Я хочу сделать синтаксический анализ XML. Где я передаю некоторый параметр в URL, он дает мне ответ в формате XML, который я принимаю в виде имени строки. Теперь я хочу проанализировать эту строку (данные XML). Я использую следующий код: -

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

the Constants.callSoap ("GetChildList", vector); вызывает метод 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; }; }

фактический ответ выглядит так: -

452 Местный 958694 Свободно 2011-05-26T16: 22: 21,29 1 1 502 тестирование 123456 0 1 523 азбука 124124 0 1

1 Ответ

2 голосов
/ 25 мая 2011

Следующий код будет искать ресурсы в classpath с именем, переданным в аргументе, и вы передаете весь XML, так что NPE очевиден.

this.getClass().getResourceAsStream(resfile_name)

Вам лучше получить inputStream из URL, как показано в приведенном ниже фрагменте с пробелом, и двигаться вперед

 HttpConnection hc = null;

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

См

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...