How to parse a String containing XML in Java and retrieve the value of the root node?

前端 未结 6 953
小鲜肉
小鲜肉 2020-11-28 06:32

I have XML in the form of a String that contains

HELLO! 

How can I get the String \"Hello!\" from the XML?

相关标签:
6条回答
  • 2020-11-28 06:43

    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
    }
    
    0 讨论(0)
  • 2020-11-28 06:44

    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!
    
    0 讨论(0)
  • 2020-11-28 06:49

    One of the above answer states to convert XML String to bytes which is not needed. Instead you can can use InputSource and supply it with StringReader.

    String xmlStr = "<message>HELLO!</message>";
    DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
    Document doc = db.parse(new InputSource(new StringReader(xmlStr)));
    System.out.println(doc.getFirstChild().getNodeValue());
    
    0 讨论(0)
  • 2020-11-28 06:51

    There is doing XML reading right, or doing the dodgy just to get by. Doing it right would be using proper document parsing.

    Or... dodgy would be using custom text parsing with either wisuzu's response or using regular expressions with matchers.

    0 讨论(0)
  • 2020-11-28 06:52

    I think you would be look at String class, there are multiple ways to do it. What about substring(int,int) and indexOf(int) lastIndexOf(int)?

    0 讨论(0)
  • 2020-11-28 06:53

    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());
    
    0 讨论(0)
提交回复
热议问题