Каков наилучший способ синтаксического анализа входной строки из сокет-соединения, если у вас нет Socket-сервера и вы не видите, что он делает? - PullRequest
0 голосов
/ 30 октября 2018

Я разместил это раньше. Я абсолютно новичок в такой ситуации. Я хорошо разбираюсь в проприетарном программном обеспечении M3 / MOVEX, но я никогда раньше не использовал сокеты для подключения к серверу. Я дошел до этой точки: я могу подключиться - я могу отправить строку XML на сервер - я могу получить ответ и положить его в строку. Я пытался разобрать его в конструкторе документов, но когда я это сделал, документ возвращается в ноль.

         try {
        //TCPSocket = new Socket("10.33.106.29", 10101);
        //Open the socket connection
        TCPSocket = new Socket("idc-v-pobap02t.ebsco.com", 10101);
        //TCPSocket = new Socket("idc-v-pobap02t", 10101);
        //Initialize the reader and writer for the socket
        is = new BufferedReader(new 
        InputStreamReader(TCPSocket.getInputStream()));
        pw = new PrintWriter(TCPSocket.getOutputStream(), true);

        //Send Data to the socket server 
        if (TCPSocket != null && is != null) {
            pw.println(XMLString + "\n");
            pw.flush();
        }

        ///The 
           while((responseLine = is.readLine()) != null){
             //Do Something
           } 
        //Hangs so I took it out 

        //Read the Data from the socket server.
       responseLine = is.readLine(); //Has my input XML String
       is.close();

      DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
      DocumentBuilder builder;
      builder = factory.newDocumentBuilder();
      doc = builder.newDocument();
      doc.setXmlVersion("1.0");
      doc = builder.parse(new InputSource(new 
      StringReader(responseLine)));

Я тоже пробовал это раньше:

        XMLInputFactory f = XMLInputFactory.newInstance();
        XMLStreamReader r;

        try {
            r = f.createXMLStreamReader(new StringReader(responseLine));
            int eventType = r.next();
            while(r.hasNext()) {
                r.require(XMLStreamReader.START_ELEMENT, null, 
                                                   "TagName");
                if(eventType == XMLStreamConstants.END_ELEMENT){
                    break;
                }

                //EventName = r.getName();
                if(eventType == XMLStreamConstants.CHARACTERS
                    || eventType == XMLStreamConstants.CDATA
                    || eventType == XMLStreamConstants.SPACE
                    || eventType == XMLStreamConstants.ENTITY_REFERENCE) {
                    serverResponse.append(r.getText());
                }

                r.nextTag();
                eventType = r.nextTag();
            }
        } catch (XMLStreamException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

Есть что-то, чего мне здесь не хватает? Как я уже сказал, я совершенно новичок в этом, поэтому, пожалуйста, не думайте, что я что-то знаю, если вы ответите.

1 Ответ

0 голосов
/ 01 ноября 2018

Я понял это. Это то, что я сделал - это работает, но если есть лучший способ - дайте мне знать.

Поток XML выглядит следующим образом:

 <loads>
   <load date="" groupsplitting="allowed" sequencemaxlookahead="0" 
   usesequenceovercontainers="true" containerselectionrule="7" 
   numstagingpositions="0" loadproportionally="false" 
   sequenceiscontainertype="false" customerid="" stage="1" userint1="0"  
   userstring2="" userstring1="" shipdate="" notes="" 
   loadid="2000151290:01001072269" id="2000151290:01001072269"/>
 </loads>


        serverResponse.append(responseLine);    
        DocumentBuilder builder = 
        DocumentBuilderFactory.newInstance().newDocumentBuilder();
        doc = builder.parse(new InputSource(new StringReader(responseLine)));
        doc.getDocumentElement().normalize();
        doc.getDocumentElement().getNodeName();
        Element rootElement = doc.getDocumentElement();
        NodeList sElement = doc.getElementsByTagName("load");
        for (int i = 0; i < sElement.getLength(); i++) {
            Element node = (Element)sElement.item(i);
            NamedNodeMap attributes = node.getAttributes();
            for (int i2 = 0; i2 < attributes.getLength(); i2++) {
                Attr attr = (Attr) attributes.item(i2);
                if(attr.getNodeName() == "loadid"){
                    Delivery = attr.getNodeValue();
                }
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...