简体   繁体   中英

How to fetch entire XML from text in Java

I have two different Strings for example:

1)

HTTP/1.1 200 OK
Content-Length: 144
content-type: application/xml
Date: Wed, 11 Nov 2015 12:57:07 GMT
Server: Jetty(7.5.4.v20111024)
Note: Header order may not reflect actual transmitted stream.

<?xml version="1.0" encoding="UTF-8"?>
<Log>
  <Code>0</Code>
  <SensitiveData2>Data Is Here</SensitiveData2>
</Log>

2)

HTTP/1.1 200 OK
Content-Type: text/xml;charset=UTF-8
Content-Length: 1099
Server: Jetty(7.5.4.v20111024)

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <Response_Phase_IIResponse xmlns="http://tempuri.org/">
      <Response_Phase_IIResult>
        <Address_Parameters_Phase_II>
          <Setup_In_CRM>NO</Setup_In_CRM>
          <CRM_Profile_ID>0</CRM_Profile_ID>
        </Address_Parameters_Phase_II>
      </Response_Phase_IIResult>
    </Response_Phase_IIResponse>
  </soap:Body>
</soap:Envelope>

I need to parse these strings and fetch the entire XML element from root node without any headers. How do I achieve this?

  1. Remove the header - everything before

<?xml

or

<soap:

  1. Use some library for XML document parsing. For example, JAXP

If those are httpResponse objects you shouldn't have to modify them to read them. The header and body are accessed separately.

Here is an example (probably imperfect code, but it works):

        SOAPConnection connection = SOAPConnectionFactory.newInstance().createConnection();
        URL endpoint = null;
        try {
        endpoint =
      new URL(new URL(url), path, new URLStreamHandler() {
                @Override
                protected URLConnection openConnection(URL url) throws IOException {
                      URL target = new URL(url.toString());
                      URLConnection connection = target.openConnection();
                      // Connection settings
                      connection.setConnectTimeout(10000); // 10 sec
                      connection.setReadTimeout(30000); // 1 min
                      return(connection);
                    }
                  });
        } catch (Exception e) {
            throw new SOAPException("Connection unavailable");
        }
        SOAPMessage response = null;
        try {
            response = connection.call(message, endpoint);
        } catch (SOAPException e) {
            connection.close();
            throw new SOAPException(e);
        } 
        try {
            SOAPBody responseBody = response.getSOAPBody();
            if(responseBody.getFault()!=null){
            throw new SOAPException("Message unreadable");
            }
        } catch (SOAPException e) {
            connection.close();
            throw new SOAPException(e);
        } 
        connection.close(); 

This statement, "SOAPBody responseBody = response.getSOAPBody();" gets the soap body.

If you are dealing with strings exactly as you reproduced then you'll need to use RegX to dispose of the bits that are not the XML body.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM