Search code examples
javaregexstringnetbeansopenvas

Splitting a String without spaces


I have the following string which is generated by an external program (OpenVAS) and returned to my program successfully as a string.

<create_target_response id="b4c8de55-94d8-4e08-b20e-955f97a714f1" status_text="OK, resource created" status="201"></create_target_response>

I am trying to split the string to give me the "b4c8d....14f1" without the inverted commas. I have tried all sorts of escape methods and keep getting the else method "String does not contain a Target ID". I have tried removing the IF statement checking for the string, but continue to have the same issue. The goal is to get my id string into jTextField6. String Lob contains the full string as above.

     if (Lob.contains("id=\"")){
      // put the split here
           String[] parts = Lob.split("id=\"");
           String cut1 = parts[1];

           String[] part2 = cut1.split("\"");
           String TaskFinal = part2[0];

           jTextField6.setText(TaskFinal);

      }
       else {
           throw new IllegalArgumentException("String does not contain a Target ID");
       }

  } catch (IOException e) {
     e.printStackTrace();
  }

It seems I only need to escape the " and not the = (Java kicks up an error if i do)

Thanks in advance

EDIT: Code as it stands now using jSoup lib - The 'id' string won't display. Any ideas? Thanks

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                        
    // TODO add your handling code here:
          String TargIP = jTextField1.getText(); // Get IP Address
          String TargName = jTextField5.getText(); // Get Target Name
          String Vag = "8d32ad99-ac84-4fdc-b196-2b379f861def";
          String Lob = "";

  final String dosCommand = "cmd /c omp -u admin -w admin --xml=\"<create_target><name>" + TargName + "</name><hosts>" + TargIP + "</hosts></create_target>\"";
  3</comment><config id='daba56c8-73ec-11df-a475-002264764cea'/><target id='" + Vag + "'/></create_task>\"";
  final String location = "C:\\";
  try {
     final Process process = Runtime.getRuntime().exec(
        dosCommand + " " + location);
     final InputStream in = process.getInputStream();
     int ch;
     while((ch = in.read()) != -1) {
        System.out.print((char)ch);
       Lob = String.valueOf((char)ch);
       jTextArea2.append(Lob);


     }

  } catch (IOException e) {
     e.printStackTrace();
  }
           String id = Jsoup.parse(Lob).getAllElements().attr("id");
     System.out.println(id); // This doesn't output? 
}

Solution

  • Everyone's telling you to use an XML parser (and they're right) but noone's showing you how.

    Here goes:

    String lob = ...
    

    Using Jsoup from http://jsoup.org, actually an HTML parser but also handles XML neatly:

    String id = Jsoup.parse(lob).getAllElements().attr("id");
    // b4c8de55-94d8-4e08-b20e-955f97a714f1
    

    With built-in Java XML APIs, less concise but no addtional libraries:

    Document dom = DocumentBuilderFactory.newInstance().newDocumentBuilder()
        .parse(new InputSource(new StringReader(lob)));
    String id = dom.getDocumentElement().getAttribute("id");
    // b4c8de55-94d8-4e08-b20e-955f97a714f1