Core Java

How to Parse XML from a String in Java

When working with XML in Java, it’s common to parse XML from a file using classes like DocumentBuilder and DocumentBuilderFactory. However, there are scenarios where XML needs to be parsed directly from a String. This article explains two effective methods for converting an XML string into a Document object: using an InputSource with a StringReader and converting the string into an InputStream.

1. Parsing XML as a String in Java

To parse XML as a String, the key is to convert the String into a source that the DocumentBuilder can process. This article provides two common ways to achieve this:

  • Using InputStream: This involves converting the String to a byte array, which is then wrapped in a ByteArrayInputStream.
  • Using InputSource: This wraps the String with a StringReader for the DocumentBuilder to read.

2. Using InputSource

Here is the first approach, which uses an InputSource to wrap the XML string:

import org.w3c.dom.Document;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.xml.sax.InputSource;
import java.io.StringReader;

public class XmlParserWithInputSource {

    public static Document loadXMLFromString(String xml) throws Exception {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        InputSource is = new InputSource(new StringReader(xml));
        return builder.parse(is);
    }

    public static void main(String[] args) {
        String xmlString = "<note><to>John</to><from>Jani</from><heading>Reminder</heading><body>Don't forget me this weekend!</body></note>";

        try {
            Document document = loadXMLFromString(xmlString);
            System.out.println("Root element: " + document.getDocumentElement().getNodeName());
        } catch (Exception e) {
        }
    }
}

In this example, the InputSource wraps the String using a StringReader, allowing the DocumentBuilder to read it as an input source. The DocumentBuilder.parse() method then processes the InputSource and converts it into a DOM Document.

For the given XML string, this approach generates the following parsed output:

Root element: note

This confirms the XML string was successfully parsed into a DOM Document.

3. Using InputStream

An alternative approach is to convert the XML string into a ByteArrayInputStream and parse it:

import org.w3c.dom.Document;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;

public class XmlParserWithInputStream {

    public static Document loadXMLFromString(String xml) throws Exception {
        InputStream stream = new ByteArrayInputStream(xml.getBytes(StandardCharsets.UTF_8));
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        return builder.parse(stream);
    }

    public static void main(String[] args) {
        String xmlString = "<note><to>John</to><from>Jani</from><heading>Reminder</heading><body>Don't forget me this weekend!</body></note>";

        try {
            Document document = loadXMLFromString(xmlString);
            System.out.println("Root element: " + document.getDocumentElement().getNodeName());
        } catch (Exception e) {
        }
    }
}

In this example, the ByteArrayInputStream converts the String into bytes and wraps it in a stream, which is then passed to the DocumentBuilder. The DocumentBuilder.parse() method reads the InputStream and generates a DOM Document.

3.1 When to Use Each Approach

  • InputSource: Use when working with small, well-defined XML strings and you want a straightforward solution.
  • InputStream: Use when encoding is critical or when the XML string is generated from byte-based sources.

4. Conclusion

In this article, we explored two effective methods for parsing XML from a String in Java: using an InputSource with a StringReader and converting the String into an InputStream. Both approaches offer simple and efficient ways to work with XML data dynamically, without relying on external files. Depending on your specific needs, whether it is ease of implementation or control over encoding, either method can be an ideal choice for parsing XML in Java.

5. Download the Source Code

This article explores how to parse an XML string in Java.

Download
You can download the full source code of this example here: java parse xml string

Omozegie Aziegbe

Omos Aziegbe is a technical writer and web/application developer with a BSc in Computer Science and Software Engineering from the University of Bedfordshire. Specializing in Java enterprise applications with the Jakarta EE framework, Omos also works with HTML5, CSS, and JavaScript for web development. As a freelance web developer, Omos combines technical expertise with research and writing on topics such as software engineering, programming, web application development, computer science, and technology.
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Back to top button