How to parse a String containing XML in Java and retrieve the value of the root node?
Using JDOM:
String xml = "<message>HELLO!</message>";org.jdom.input.SAXBuilder saxBuilder = new SAXBuilder();try { org.jdom.Document doc = saxBuilder.build(new StringReader(xml)); String message = doc.getRootElement().getText(); System.out.println(message);} catch (JDOMException e) { // handle JDOMException} catch (IOException e) { // handle IOException}
Using the Xerces DOMParser
:
String xml = "<message>HELLO!</message>";DOMParser parser = new DOMParser();try { parser.parse(new InputSource(new java.io.StringReader(xml))); Document doc = parser.getDocument(); String message = doc.getDocumentElement().getTextContent(); System.out.println(message);} catch (SAXException e) { // handle SAXException } catch (IOException e) { // handle IOException }
Using the JAXP interfaces:
String xml = "<message>HELLO!</message>";DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();DocumentBuilder db = null;try { db = dbf.newDocumentBuilder(); InputSource is = new InputSource(); is.setCharacterStream(new StringReader(xml)); try { Document doc = db.parse(is); String message = doc.getDocumentElement().getTextContent(); System.out.println(message); } catch (SAXException e) { // handle SAXException } catch (IOException e) { // handle IOException }} catch (ParserConfigurationException e1) { // handle ParserConfigurationException}
You could also use tools provided by the base JRE:
String msg = "<message>HELLO!</message>";DocumentBuilder newDocumentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();Document parse = newDocumentBuilder.parse(new ByteArrayInputStream(msg.getBytes()));System.out.println(parse.getFirstChild().getTextContent());
You could do this with JAXB (an implementation is included in Java SE 6).
import java.io.StringReader;import javax.xml.bind.*;import javax.xml.transform.stream.StreamSource;public class Demo { public static void main(String[] args) throws Exception { String xmlString = "<message>HELLO!</message> "; JAXBContext jc = JAXBContext.newInstance(String.class); Unmarshaller unmarshaller = jc.createUnmarshaller(); StreamSource xmlSource = new StreamSource(new StringReader(xmlString)); JAXBElement<String> je = unmarshaller.unmarshal(xmlSource, String.class); System.out.println(je.getValue()); }}
Output
HELLO!